В соответствии с multiple публикации, Microsoft разрешила использовать параметр приложения - WEBSITE_TIME_ZONE
- для управления часовым поясом веб-сервера.
Чтобы попробовать это, я установил это значение в "Восточное стандартное время", которое является моим местным часовым поясом.
На странице ASP.NET MVC Razor я добавил следующий код:
DateTime.Now: @DateTime.Now
DateTimeOffset.Now: @DateTimeOffset.Now
DateTime.UtcNow: @DateTimeOffset.UtcNow
когда я прошёл эту ночь в 5:10:07 вечера по восточному стандартному времени, он дал следующий результат:
DateTime.Now: 6/18/2015 5:10:07 PM
DateTimeOffset.Now: 6/18/2015 5:10:07 PM +00:00
DateTime.UtcNow: 6/18/2015 9:10:07 PM
Как вы можете видеть, настройка правильно разрешала DateTime.Now
возвращать правильное значение в моем часовом поясе, а не UTC, как обычно делают веб-сайты Azure/веб-приложения. DateTime.UtcNow
всегда возвращал правильное значение по понятным причинам.
Однако DateTimeOffset.Now
возвращает локальное время, но со смещением +00:00
- почти так, как если бы часы были изменены, а не часовой пояс. Это происходит, даже если документация говорит (внимание мое):
Возвращает объект DateTimeOffset, который установлен на текущую дату и время на текущем компьютере, с смещением, установленным на локальное смещение по времени от скоординированного универсального времени (UTC).
Итак, что происходит, когда параметр WEBSITE_TIME_ZONE
влияет на DateTime.Now
, но не влияет на DateTimeOffset.Now
? И есть ли способ обойти это?
Как пояснение, я не хочу менять часовой пояс на сервере. Мы работаем над правильным решением, основанным на часовом поясе. Но мне все еще интересно, почему так происходит.