У нас есть веб-задание, которое работает на .Net Framework 4.7.1 и выполняет преобразование даты и времени из DateTimeOffset.UtcNow
в континентальное время Чили (то есть, если я не ошибаюсь, "Стандартное время Pacific SA").
При локальном запуске этого веб-задания (на компьютере с Windows 10) он работает правильно и выполняет преобразование с применением DST, но при развертывании в службе приложений Azure это больше не работает, а окончательный DateTime всегда через час чем текущее официальное время.
Я изначально переключился с TimeZoneInfo.ConvertTimeBySystemTimeZoneId
на TimeZoneInfo.ConvertTimeFromUtc
в предположении, что первый не учитывает DST, но это не сработало;
Затем я попытался переключить «неправильный» собственный компьютер, изменив часовой пояс на «UTC_dstoff» и отключив в меню «Настройка даты / времени» параметры «Автоматически настраивать летнее время», а также «Автоматически устанавливать время». 'но все еще работает, как и ожидалось, локально;
Последнее, что я пытался, это изменить часовой пояс на службу приложений, используя переменную среды WEBSITE_TIME_ZONE
на «Pacific SA Standard Time», и это не было убедительным. Я бы сказал, что первоначально это сработало, но после еще нескольких изменений часового пояса он снова начал прибавлять один час.
Это можно воспроизвести следующими строками:
var timeZoneId = "Pacific SA Standard Time";
var timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
var dateTimeOffset = DateTimeOffset.UtcNow;
var localTime = TimeZoneInfo.ConvertTimeFromUtc(dateTimeOffset.DateTime, timeZone);
Я ожидаю, что функция TimeZoneInfo.ConvertTimeFromUtc
будет правильно применять DST, когда часовой пояс с DST будет выбран как локально, так и в службе приложений Azure. Вместо этого он, кажется, работает должным образом в Windows 10, но случайным образом в службе приложений Azure.