C # DateTime à l'heure UTC sans changer l'heure

124

Comment convertir une date / heure préexistante en heure UTC sans changer l'heure réelle.

Exemple:

DateTime dateTime = GetSomeDateTime(); // dateTime here is 3pm
dateTime.ToUtcDateTime() // datetime should still be 3pm
Luke Belbina
la source
Vous êtes en PST ? Comment obtenez-vous de la PSTvaleur?
Kiquenet

Réponses:

207
6/1/2011 4:08:40 PM Local
6/1/2011 4:08:40 PM Utc

de

DateTime dt = DateTime.Now;            
Console.WriteLine("{0} {1}", dt, dt.Kind);
DateTime ut = DateTime.SpecifyKind(dt, DateTimeKind.Utc);
Console.WriteLine("{0} {1}", ut, ut.Kind);
tofutim
la source
50

Utilisez la DateTime.SpecifyKindméthode statique.

Crée un nouvel objet DateTime qui a le même nombre de graduations que le DateTime spécifié, mais qui est désigné comme heure locale, temps universel coordonné (UTC) ou ni l'un ni l'autre, comme indiqué par la valeur DateTimeKind spécifiée.

Exemple:

DateTime dateTime = DateTime.Now;
DateTime other = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc);

Console.WriteLine(dateTime + " " + dateTime.Kind); // 6/1/2011 4:14:54 PM Local
Console.WriteLine(other + " " + other.Kind);       // 6/1/2011 4:14:54 PM Utc
Liam
la source
18

Vous pouvez utiliser le constructeur surchargé de DateTime:

DateTime utcDateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, DateTimeKind.Utc);
Entre
la source
0

Vous pouvez également le faire de cette façon:

DateTime utcDateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second).ToUniversalTime();
Reyan Chougle
la source
Cela peut ne pas fonctionner comme prévu. Essayez ... new DateTime(dateTime.Year, dateTime.Month, dateTime.dateTimeay, dateTime.Hour, dateTime.Minute, dateTime.Second).ToUniversalTime().ToString() vs DateTime.SpecifyKind(dateTime, DateTimeKind.Utc).ToString() Vous verrez que vous obtenez des résultats différents.
Homer le
-7

Utilisez la DateTime.ToUniversalTimeméthode.

Femaref
la source
3
qui change la dateHeure à 23h00 (je suis en PST)
Luke Belbina