68 votes

Comment définir un fuseau horaire (ou un genre) d'une valeur DateTime ?

Je veux stocker l'heure UTC stricte dans une variable DateTime et la sortir au format ISO 8601.

Pour faire le dernier j'ai utilisé .ToString("yyyy-MM-ddTHH:mm:sszzz"), et il a découvert que le fuseau horaire est UTC+01:00.

J'ai essayé d'utiliser .Kind = DateTimeKind.Utc, mais le système indique que la propriété Kind n'a pas de paramètre.

Comment spécifier explicitement que l'heure est en UTC ? Comment définir la propriété Kind ?

78voto

SandRock Points 1990

Si vous voulez profiter du fuseau horaire de votre machine locale, vous pouvez utiliser myDateTime.ToUniversalTime() pour obtenir l'heure UTC à partir de votre heure locale ou myDateTime.ToLocalTime() pour convertir l'heure UTC en heure de la machine locale.

// convert UTC time from the database to the machine's time
DateTime databaseUtcTime = new DateTime(2011,6,5,10,15,00);
var localTime = databaseUtcTime.ToLocalTime();

// convert local time to UTC for database save
var databaseUtcTime = localTime.ToUniversalTime();

Si vous avez besoin de convertir l'heure de/vers d'autres fuseaux horaires, vous pouvez utiliser TimeZoneInfo.ConvertTime() o TimeZoneInfo.ConvertTimeFromUtc() .

// convert UTC time from the database to japanese time
DateTime databaseUtcTime = new DateTime(2011,6,5,10,15,00);
var japaneseTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
var japaneseTime = TimeZoneInfo.ConvertTimeFromUtc(databaseUtcTime, japaneseTimeZone);

// convert japanese time to UTC for database save
var databaseUtcTime = TimeZoneInfo.ConvertTimeToUtc(japaneseTime, japaneseTimeZone);

Liste des fuseaux horaires disponibles

Classe TimeZoneInfo sur MSDN

56voto

Frank Boyne Points 1948

Alors que la propriété DateTime.Kind n'a pas de setter, la méthode statique DateTime.SpecifyKind crée une instance DateTime avec une valeur spécifiée pour Kind.

Alternativement, il y a plusieurs Surcharges du constructeur de DateTime qui prennent un paramètre DateTimeKind

13voto

Sandeep Nair Points 101

Vous pouvez également essayer ceci, c'est facile à mettre en œuvre.

TimeZone time2 = TimeZone.CurrentTimeZone;
DateTime test = time2.ToUniversalTime(DateTime.Now);
var singapore = TimeZoneInfo.FindSystemTimeZoneById("Singapore Standard Time");
var singaporetime = TimeZoneInfo.ConvertTimeFromUtc(test, singapore);

Modifiez le texte sur lequel l'heure standard que vous souhaitez modifier.

Utilisez TimeZone de C# à mettre en œuvre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X