web-dev-qa-db-fra.com

datetime à chaîne avec fuseau horaire

J'ai un DateTime stocké en temps universel (UTC) de valeur 2010-01-01 01:01:01.

Je voudrais l'afficher dans EST dans ce format 2010-01-01 04: 01: 01GMT-04: , cependant le formateur 'K' pour le fuseau horaire ne fonctionne pas dans ToString

45
Comma

Utilisez le spécificateur de format "zzz" pour obtenir le décalage UTC. Par exemple:

        var dt = new DateTime(2010, 1, 1, 1, 1, 1, DateTimeKind.Utc);
        string s = dt.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss \"GMT\"zzz");
        Console.WriteLine(s);

Sortie: 31/12/2009 19:01:01 GMT-06: 00

Je suis dans le fuseau horaire CDT. Assurez-vous que DateTime est sans ambiguïté DateTimeKind.Utc.

60
Hans Passant

Quelque chose comme ça fonctionne. Vous pourriez probablement le nettoyer un peu plus:

string newDate = string.Format("{0:yyyy-MM-dd HH:mm:ss} GMT {1}", dt.ToLocalTime(), dt.ToLocalTime().ToString("%K"));
5
Robaticus

Si, comme moi, vous avez besoin d'un format comme 2018-03-31T01:23:45.678-0300 (pas de deux-points dans la partie fuseau horaire), vous pouvez utiliser ceci:

datetime.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz").Remove(26,1)
5
Andrew

Cette méthode renvoie l'heure spécifiée en heure normale de l'Est (comme la question demandée), même si EST n'est pas le fuseau horaire local :

public string GetTimeInEasternStandardTime(DateTime time)
{
    TimeZoneInfo easternStandardTime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
    DateTimeOffset timeInEST = TimeZoneInfo.ConvertTime(time, easternStandardTime);
    return timeInEST.ToString("yyyy-MM-dd hh:mm:ss tt\" GMT\"zzz");
}

Remarque: je n'ai pas testé cela dans un système d'exploitation non anglais. Voir la documentation MSDN sur TimeZoneInfo.FindSystemTimeZoneById .

4
Jon Schneider

Je pense que vous recherchez la classe TimeZoneInfo (voir http://msdn.Microsoft.com/en-us/library/system.timezoneinfo_members.aspx ). Il dispose de nombreuses méthodes statiques pour convertir les dates entre les fuseaux horaires.

1
Philip Smith