C # DateTime para UTC Hora sem alterar a hora

124

Como eu converteria uma data e hora pré-existentes para a hora UTC sem alterar a hora real.

Exemplo:

DateTime dateTime = GetSomeDateTime(); // dateTime here is 3pm
dateTime.ToUtcDateTime() // datetime should still be 3pm
Luke Belbina
fonte
Você está no PST ? Como você obtém PSTvalor?
Kiquenet

Respostas:

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
fonte
50

Use o DateTime.SpecifyKindmétodo estático.

Cria um novo objeto DateTime que possui o mesmo número de ticks que o DateTime especificado, mas é designado como hora local, UTC (Horário Universal Coordenado) ou nenhum, conforme indicado pelo valor DateTimeKind especificado.

Exemplo:

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
fonte
18

Você pode usar o construtor sobrecarregado de DateTime:

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

Você também pode fazer o seguinte:

DateTime utcDateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second).ToUniversalTime();
Reyan Chougle
fonte
Isso pode não funcionar conforme o esperado. Tente ... new DateTime(dateTime.Year, dateTime.Month, dateTime.dateTimeay, dateTime.Hour, dateTime.Minute, dateTime.Second).ToUniversalTime().ToString() vs DateTime.SpecifyKind(dateTime, DateTimeKind.Utc).ToString() Você verá resultados diferentes.
Homer
-7

Use o DateTime.ToUniversalTimemétodo

Femaref
fonte
3
Isso muda o dateTime para ser 23:00 (eu estou no PST) #
Luke Belbina