C # DateTime do czasu UTC bez zmiany czasu

124

Jak przekonwertować istniejącą datę i godzinę na czas UTC bez zmiany czasu rzeczywistego.

Przykład:

DateTime dateTime = GetSomeDateTime(); // dateTime here is 3pm
dateTime.ToUtcDateTime() // datetime should still be 3pm
Luke Belbina
źródło
Jesteś w PST ? Jak zyskujesz PSTwartość?
Kiquenet

Odpowiedzi:

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

z

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
źródło
50

Użyj DateTime.SpecifyKindmetody statycznej.

Tworzy nowy obiekt DateTime, który ma taką samą liczbę taktów jak określony DateTime, ale jest wyznaczony jako czas lokalny, uniwersalny czas koordynowany (UTC) lub żaden z nich, zgodnie z określoną wartością DateTimeKind.

Przykład:

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
źródło
18

Możesz użyć przeciążonego konstruktora DateTime:

DateTime utcDateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second, DateTimeKind.Utc);
Pomiędzy
źródło
0

Możesz to również zrobić w ten sposób:

DateTime utcDateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second).ToUniversalTime();
Reyan Chougle
źródło
To może nie działać zgodnie z oczekiwaniami. Spróbuj ... new DateTime(dateTime.Year, dateTime.Month, dateTime.dateTimeay, dateTime.Hour, dateTime.Minute, dateTime.Second).ToUniversalTime().ToString() vs DateTime.SpecifyKind(dateTime, DateTimeKind.Utc).ToString() Zobaczysz, że uzyskasz różne wyniki.
Homer
-7

Użyj DateTime.ToUniversalTimemetody.

Femaref
źródło
3
która zmienia datę i godzinę na 23:00 (jestem w PST)
Luke Belbina