C # DateTime to UTC Час без зміни часу


124

Як би я перетворив попередньо існуючу дату в UTC, не змінюючи фактичний час.

Приклад:

DateTime dateTime = GetSomeDateTime(); // dateTime here is 3pm
dateTime.ToUtcDateTime() // datetime should still be 3pm

Ви в PST ? Як ви отримуєте PSTцінність?
Кікенет

Відповіді:


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

з

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);

50

Використовуйте DateTime.SpecifyKindстатичний метод.

Створює новий об'єкт DateTime, який має таку ж кількість тиків, що і вказаний DateTime, але позначений як місцевий час, Загальний координований час (UTC), або ні, як зазначено вказаним значенням DateTimeKind.

Приклад:

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

18

Ви можете використовувати перевантажений конструктор DateTime:

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

0

Ви також можете це зробити так:

DateTime utcDateTime = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, dateTime.Second).ToUniversalTime();

Це може не працювати, як очікувалося. Спробуйте ... new DateTime(dateTime.Year, dateTime.Month, dateTime.dateTimeay, dateTime.Hour, dateTime.Minute, dateTime.Second).ToUniversalTime().ToString() vs DateTime.SpecifyKind(dateTime, DateTimeKind.Utc).ToString() Ви побачите, що отримаєте різні результати.
Гомер

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.