Я использую следующую функцию для перевода даты из UTC в мое местное время (западно-австралийский стандарт, +8 по Гринвичу).
var waTimeZone = TimeZoneInfo.FindSystemTimeZoneById("W. Australia Standard Time");
var timeInWA = TimeZoneInfo.ConvertTime(utcDateTime, TimeZoneInfo.Utc, waTimeZone);
Однако этот код начал работать некорректно для определенных дат на нашем производственном сервере.
Например,
Если я конвертирую 31/10/2011 00:00 ->31/10/2011 09:00 вместо 31/10/2011 08:00.
если я преобразую 01/10/2011 00:00 -> 01/10/2011 08:00, что правильно.
Этот код работал нормально в течение некоторого времени после производства имы заметили это несколько дней назад.Сервер настроен на GMT +8, хотя я не думаю, что это влияет на этот фрагмент кода.
Кроме того, этот же фрагмент кода работает нормально на других серверах и локальных машинах.
Может ли кто-нибудь представить какую-то идею относительно того, что могло вызвать такое изменение поведения?Обновления Windows?Изменение конфигурации IIS?.Net ошибка?и т.д ...
ОБНОВЛЕНИЕ: Я проверил дополнительную информацию, как предложил Яхья.Результаты впечатляют.
waTimeZone.IsDaylightSavingTime(date) --> False
waTimeZone.GetUtcOffset(date) --> 08:00:00
Но я все равно получаю неправильное преобразование +9 часов вместо +8.Так что .Net здесь несколько непоследователен.
Однако я проверил записи реестра сервера, которые дают неправильное преобразование, и локальный компьютер, который дает мне правильные ответы, и это интересно.
Я думаю, что наши ИТ-специалисты не обновляли исправления DST на сервере.
Обновление: подтверждение того, что ИТ-специалисты пропустили этот сервер в своих установках исправлений DST.Это коренная причина такого поведения.