Comment formater DateTime ou TimeZone / TimeZoneInfo à afficher trois lettres?
-
20-09-2019 - |
Question
Je travaille avec une spécification qui appelle à un particulier le format Datetime que je ne l'ai pas nécessairement dû travailler avec encore.
A l'heure du processus, un OFX (1 non 2) datetime doivent être estampillés (soit DTCLIENT ou DTSERVER) dans un format comme celui-ci:
20.071.015.021.529,000
Cependant, dans les exemples, il est indiqué:
20071015021529.000[-8:PST]
Je n'ai pas un problème avec le premier en utilisant une instruction de
DateTime.Now.ToString("yyyyMMddHHmmss.fff")
Je peux même comprendre comment obtenir %z
pour obtenir le décalage correct.
Le code fuseau horaire de trois lettres est où je suis trébucher. Est-il un moyen facile d'obtenir ce en .net, ou que je vais finir par écrire du code à la sortie et analyser ce que je dois?
La solution
Vous devez savoir exactement dont 3 codes lettre dont il a besoin. Qu'est-ce qui Europe/Paris
donner, par exemple? Personnellement, je convertir les données en UTC et le format de cette façon, à moins que vous avez réellement besoin de conserver les informations de fuseau horaire.
Autres conseils
Les codes de fuseau horaire de trois lettres ne sont pas uniques dans tous les pays et ne sont pas complètement normalisées. Par exemple, « CST » peut être l'abréviation de « Central Standard Time (Etats-Unis) » ou « heure normale chinoise ». Ce qui est correct dépend de vos paramètres régionaux.
A ma connaissance, il n'y a pas de fonctionnalité intégrée dans le .NET Framework pour rechercher des codes comme celui-ci, vous devrez implémenter vous-même.
De plus (mais vous savez sans doute), vous devez faire attention à la façon dont vous implémenter cette fonctionnalité. Il n'y a pas nécessairement une à une correspondance entre les décalages UTC et temps codes de zone. Par exemple, UTC-0700 pourrait être soit US Heure normale des Rocheuses (MST) ou US Heure avancée du Pacifique (HAP).
Si vous utilisez r il vous donnera le format RFC. Il va vous aider.
String.Format("{0:r}", dt); // "Sun, 09 Mar 2008 16:05:07 GMT" RFC1123
Vous pouvez également vérifier ce lien SO , si elle peut vous aider.