Не уверен, что я здесь делаю не так.Я пытаюсь получить текущее # часовое смещение UTC для Восточной Австралии.Код, который я использую, возвращается с GMT + 10 часов, тогда как он должен быть 11, поскольку они находятся в летнее время.
Вот то, что я использую, чтобы получить его:
With TimeZoneInfo.FindSystemTimeZoneById("E. Australia Standard Time")
Console.Write(.GetUtcOffset(Now.ToUniversalTime).Hours)
End With
Похоже, что выводится "базовое" смещение без учета DST.Как получить фактическое текущее смещение, учитывающее DST?
Обновление 1 в ответ на предложение Джули.Я пытался получить IsDaylightSavingTime, но это, кажется, дает противоречивый результат.Я знаю, что и Восточная Австралия, и Новая Зеландия в настоящее время находятся в DST.
Однако следующее возвращает FALSE (неверно):
TimeZoneInfo.FindSystemTimeZoneById("E. Australia Standard Time").IsDaylightSavingTime(Now.ToUniversalTime)
И следующее возвращает TRUE (правильно):
TimeZoneInfo.FindSystemTimeZoneById("New Zealand Standard Time").IsDaylightSavingTime(Now.ToUniversalTime)
Обновление 2 После просмотра этого поста я проверил IsAmbiguousTime, однако в обоих случаях он имеет значение False.Так что это не "неоднозначно", но зона "Австралия" не использует DST, когда это должно быть.
Обновление 3 После просмотра этого поста , я установил декабрь 2011 накопительное обновление DST от MS, но не было радости.Зона E. Australia по-прежнему неверна.
Я также попытался запустить код на 2 других серверах, с тем же результатом.У меня .net v3.5, остальные v4.
Обновление 4 Хорошо, возможно, это решено.Просматривая список идентификаторов часовых поясов системы, я заметил другое имя зоны для Восточного Ауса.Это называется "AUS Eastern Standard Time".Используя эту зону, он дает правильный, дружественный к DST результат.Использование «стандартного времени Австралии» не имеет значения.
Поиск вокруг кажется извращенным, поскольку разные города в одном часовом поясе одной и той же страны могут иметь разные правила перехода на летнее время.Кто позволил им сделать это ??
Это проблема, связанная с отсутствием глобальной карты с указанием идентификаторов зон и городов.Конечно, это не слишком сложно для MS.Можно использовать свойство DisplayName для отображения списка, из которого пользователи могут выбирать, но если приложению необходимо преобразовать время из одного города в другой, ему нужно каким-то образом узнать, какие идентификаторы должны использовать эти города.
Если MSвключил поиск City-to-ZoneID, по крайней мере, для крупных городов, это заняло бы много времени, работая с часовыми поясами.