Je connais la classe System.TimeZone ainsi que les nombreuses utilisations de la méthode DateTime.ToString(). Ce que je n'ai pas réussi à trouver est un moyen de convertir un DateTime en une chaîne qui, en plus des informations d'heure et de date, contient l'abréviation de fuseau horaire à trois lettres (en fait, les info-bulles de StackOverflow l'affichage de l'heure fonctionne).Comment afficher DateTime avec un fuseau horaire abrégé?
Pour faire un exemple facile à suivre pour tout le monde, continuons avec l'exemple de StackOverflow. Si vous regardez l'infobulle qui s'affiche sur les heures relatives, elle affiche la date complète, l'heure, y compris les secondes au format 12 heures, une désignation AM/PM, puis l'abréviation du fuseau horaire à trois lettres (dans leur cas, Coordonnée Temps universel). Je me rends compte que je pourrais facilement obtenir GMT ou UTC en utilisant les méthodes intégrées, mais ce que je veux vraiment, c'est l'heure comme c'est — localement dans ce cas, sur un serveur web.
Si notre serveur Web exécute Windows Server 2k3 et que son fuseau horaire est défini sur CST (ou, jusqu'à ce que daylight saving repasse en arrière, CDT est-il?), J'aimerais que notre application Web ASP.NET affiche DateTimes par rapport à ce fuseau horaire ainsi que formaté pour afficher un "CST" à la fin. Je me rends compte que je pourrais facilement le coder en dur, mais dans l'intérêt de la robustesse, je préférerais vraiment une solution basée sur le serveur exécutant les paramètres d'environnement du système d'exploitation du code.
En ce moment, j'ai tout, mais l'abréviation de fuseau horaire en utilisant le code suivant:
myDateTime.ToString("MM/dd/yyyy hh:mm:ss tt")
qui affiche:
10/07/2008 15:40:31
Tous Je veux (et ce n'est pas beaucoup, promesse!) Est pour qu'il dise:
10/07/2008 03:40:31 CDT
Je peux utiliser System.TimeZone.CurrentTimeZone et l'utiliser pour afficher correctement "Central Daylight Time" mais ... c'est un peu trop long par souci de brièveté. Suis-je alors obligé d'écrire une routine de manipulation de chaînes pour supprimer les espaces blancs et les lettres non majuscules? Alors que cela pourrait fonctionner, cela me semble incroyablement piraté ...
Googling et en regardant autour de là n'a pas produit quelque chose de applicable à ma question spécifique.
Cette approche présente quelques failles. Par exemple, en Arizona, où ils utilisent l'heure normale des montagnes et n'observent pas l'heure d'été, .NET a un DaylightName et un StandardName de "US Mountain Standard Time" qui montrera "UMST" avec votre méthode. Je m'attendrais à voir "MST" à la place (à la fois pendant l'été et l'hiver). Malheureusement, le framework .NET semble ne pas être à la hauteur, j'ai donc eu recours à une table de recherche statique. – codemonkey
Cela ne fonctionnera pas pour autant de fuseaux horaires, par ex. ** ACT ** _Acre Time_ (UTC -5) – Tanmay