Я играю с некоторым кодом на С#, чтобы попытаться понять, как вычесть объекты DateTime в С# в отношении летнего времени.
В Google и других источниках время перехода на летнее время "spring вперед" в Восточном стандартном часовом поясе в 2017 году было в 12:00 12 марта. Таким образом, первые несколько часов дня в эту дату были
12:00am - 1:00am
1:00am - 2:00am
(There was no 2:00am - 3:00am hour due to the "spring ahead")
3:00am - 4:00am
Итак, если бы я рассчитывал разницу во времени между 1:00 и 4:00 в этот часовой пояс в эту дату, я ожидал, что результат будет 2 часов.
Однако код, который я собрал, чтобы попытаться смоделировать эту проблему, возвращает часовой пояс 3.
код:
TimeZoneInfo easternStandardTime = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime oneAm = TimeZoneInfo.ConvertTime(new DateTime(2017, 03, 12, 01, 00, 00), easternStandardTime);
DateTime fourAm = TimeZoneInfo.ConvertTime(new DateTime(2017, 03, 12, 04, 00, 00), easternStandardTime);
TimeSpan difference = (fourAm - oneAm);
Console.WriteLine(oneAm);
Console.WriteLine(fourAm);
Console.WriteLine(TimeZoneInfo.Local.IsDaylightSavingTime(oneAm));
Console.WriteLine(TimeZoneInfo.Local.IsDaylightSavingTime(fourAm));
Console.WriteLine(difference);
На моем ПК это генерирует:
2017-03-12 01:00:00.000 -5
2017-03-12 04:00:00.000 -4
False
True
03:00:00
Весь этот вывод будет таким, как ожидалось, за исключением того, что конечное значение 3 часа, которое, как я уже отмечал выше, я ожидаю вместо этого на 2 часа.
Очевидно, что мой код неправильно моделирует ситуацию, о которой я имею в виду. Каков недостаток?