Como faço para formatar o DateTime ou o Timegone/TimeZoneInfo para exibir três letras?
-
20-09-2019 - |
Pergunta
Estou trabalhando com uma especificação que exige um formato peculiar DateTime com o qual ainda não tive que trabalhar.
No momento do processo, um OFX (1 não 2) DateTime deve ser carimbado (dtclient ou dtserver) em um formato como este:
20071015021529.000
No entanto, nos exemplos, é mostrado:
20071015021529.000[-8:PST]
Não tenho problemas com o primeiro usando uma declaração de
DateTime.Now.ToString("yyyyMMddHHmmss.fff")
Eu posso até descobrir como conseguir %z
Para obter o deslocamento correto.
O código do fuso horário de três letras é onde estou tropeçando. Existe uma maneira fácil de obter isso no .NET, ou vou acabar escrevendo código para produzir e analisar o que preciso?
Solução
Você precisa descobrir exatamente quais códigos de três letras precisam. O que seria Europe/Paris
dar, por exemplo? Pessoalmente, eu converteria os dados para o UTC e os formava dessa maneira, a menos que você realmente precise preservar as informações do fuso horário.
Outras dicas
Os códigos de fuso horário de três letras não são únicos entre os países e não são completamente padronizados. Por exemplo, "CST" pode ser a abreviação de "Time Standard Time (EUA)" ou "Tempo padrão chinês". O que está correto depende do seu local.
Que eu saiba, não há funcionalidade incorporada na estrutura .NET para procurar códigos como este, então você precisará implementá -la por conta própria.
Além disso (mas você provavelmente sabe disso), precisa ter cuidado com a forma como implementa essa funcionalidade. Não há necessariamente uma correspondência individual entre as compensações UTC e os códigos de fuso horário. Por exemplo, o UTC-0700 pode ser o tempo padrão da montanha dos EUA (MST) ou Hora do dia do Pacífico dos EUA (PDT).
Se você usar o R, ele lhe dará formato RFC. Vai te ajudar.
String.Format("{0:r}", dt); // "Sun, 09 Mar 2008 16:05:07 GMT" RFC1123
Você também pode Verifique este link So, se pode ajudá -lo.