ASP.NET 3.5: трудности с получением текущего смещения часового пояса - PullRequest
4 голосов
/ 02 декабря 2011

Не уверен, что я здесь делаю не так.Я пытаюсь получить текущее # часовое смещение 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, по крайней мере, для крупных городов, это заняло бы много времени, работая с часовыми поясами.

1 Ответ

0 голосов
/ 02 декабря 2011

Я не знаю, есть ли автоматический способ, но вы могли бы использовать TimeZone.IsDaylightSavingsTime и DaylightTime.Delta для расчета необходимой корректировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...