Я написал несколько тестов для преобразования времени из определенного часового пояса в UTC.
Правила гласят, что в Европе часы сдвинуты вперед в 01:00 UTC, для «стандартного времени GTB» это означает +2 UTC, например, 03:00:00.
Однако я обнаружил, что существуют расхождения в тестах для разных платформ (Linux против Windows) с использованием метода TimeZoneInfo.IsDaylightSavingTime (dateTime).
Я создал новый тестовый объект для даты и времени перехода DST:
var testDate = new DateTime(2019, 03, 31, 03, 20, 00); //20 minutes after Daylight Saving Time start
...
И передал его для объекта TimeZoneInfo 'timeZone', где часовой пояс был установлен на 'Стандартное время GTB':
...
var timeZone = TimeZoneInfo.FindSystemTimeZoneById("GTB Standard Time");
return timeZone.IsDaylightSavingTime(testDate);
}
Возвращает Ложь , хотя в 03:20:00 локально в 2019-03-31 летнее время уже должно быть включено. Это должно было вернуть True.
Мне удалось повторить этот тест только в Windows, используя встроенную базу данных для часовых поясов .Net. С помощью tzdata db (например, NodaTime ) возвращает True для этого теста.
Запутанная часть была в том, что
Я вручную выдал ошибку для объекта timeZone, чтобы посмотреть, какая дополнительная информация поступает от объекта TimeZoneInfo, и обнаружил, что запуск DST действительно корректен:
timeZone.GetAdjustmentRules().First().DaylightTransitionStart.TimeOfDay
возвращает 03: 00: 00
Может ли кто-нибудь это подтвердить, а также есть ли способ проверить, где окна принимают время перехода на летнее время? Могу ли я выполнить текущий тестовый тест для Windows и Linux без использования каких-либо внешних библиотек?