Это будет работать:
TimeZoneInfo tzEasternZone = TimeZoneInfo.FindSystemTimeZoneById(
"Eastern Standard Time");
DateTime utc = DateTime.Parse("2009-11-01T05:00:00Z",
CultureInfo.InvariantCulture,
DateTimeStyles.RoundtripKind);
bool isDaylight = tzEasternZone.IsDaylightSavingTime(utc);
Исходный код имел две проблемы:
Несмотря на то, что было указано значение UTC, оно преобразовывалось в локальноевид в заявлении Parse
.Таким образом, здесь можно ввести двусмысленность.
Метод IsDaylightTime
в классе DateTime
примет местный часовой пояс, если тип является локальным или не указан.После вызова ConvertTime
результат имеет неопределенный вид, поэтому он проверял правила местного часового пояса, а не восточного часового пояса.