Неоднозначное локальное время в C#
Неоднозначное время возникает осенью, когда переводят стрелки назад и один и тот же час на циферблате повторяется. Для UTC это два разных момента, а локальная запись выглядит одинаково.
Метод TimeZoneInfo.IsAmbiguousTime проверяет, попадает ли локальное время в такой повторяющийся час. В него передают DateTime с DateTimeKind.Unspecified: это показания часов, а не готовый момент UTC.
Проверим момент 2024-10-27 02:30 в поясе процесса. Там, где в эту ночь часы переводят назад, момент неоднозначен. Если пояс этот час не повторяет, проверка ложна:
TimeZoneInfo zone = TimeZoneInfo.Local;
DateTime candidate = new DateTime(2024, 10, 27, 2, 30, 0, DateTimeKind.Unspecified);
Console.WriteLine(zone.IsAmbiguousTime(candidate));
Для пояса процесса проверьте момент 2024-11-03 01:30:00 и выведите результат проверки.