Как установить часовой пояс (или вид) значения DateTime? - PullRequest
38 голосов
/ 05 июня 2011

Я имею в виду хранить строгое время по Гринвичу в переменной DateTime и выводить его в формате ISO 8601.

Чтобы сделать последнее, я использовал .ToString ("гггг-ММ-ддТЧ: мм: ссззз"), и он обнаружил, что часовой пояс UTC + 01: 00.

Я пытался использовать .Kind = DateTimeKind.Utc, но в нем говорится, что свойство Kind не имеет установщика.

Как явно указать время в UTC? Как устанавливается свойство Kind?

Ответы [ 3 ]

45 голосов
/ 05 июня 2011

Если вы хотите использовать часовой пояс вашего локального компьютера, вы можете использовать myDateTime.ToUniversalTime() для получения времени UTC из вашего местного времени или myDateTime.ToLocalTime() для преобразования времени UTC в время локального компьютера.

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

Если вам нужно преобразовать время из / в другие часовые пояса, вы можете использовать TimeZoneInfo.ConvertTime() или 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);

Список доступных часовых поясов

Класс TimeZoneInfo на MSDN

31 голосов
/ 05 июня 2011

Хотя свойство DateTime.Kind не имеет установщика, статический метод DateTime.SpecifyKind создает экземпляр DateTime с указанным значением для Kind.

В качестве альтернативы существует несколько Перегрузка конструктора DateTime , которая принимает параметр DateTimeKind

6 голосов
/ 20 августа 2015

Вы также можете попробовать это, это легко реализовать

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

Измените текст на стандартное время, которое вы хотите изменить.реализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...