Определите, указано ли время UTC в летнее время для данного часового пояса. - PullRequest
1 голос
/ 28 февраля 2011

У меня есть время в UTC. У меня также есть назначение "Комната", с которым частичная информация о часовом поясе связана с ним (у него есть местоположение, поэтому я знаю, что это Восточный, Тихий и т. Д.).

Мне нужно взять время UTC и преобразовать его в «целевой» часовой пояс. Однако дата может быть в будущем или в прошлом, поэтому «целевой» часовой пояс должен быть «стандартным» или «дневным» в соответствии с правилами соответствующего часового пояса.

Итак, я хочу что-то вроде этого:

TimeZoneInfo.ConvertTimeFromUtc(UTCDateTime, TimeZoneInfo.FindSystemTimeZoneById(tz));

Но я не знаю, как получить "tz", поскольку все, что я знаю, это то, что это (например) значение PST или PDT, я не знаю, какое именно.

Как мне подойти к этому?

Ответы [ 3 ]

1 голос
/ 28 февраля 2011

Вы всегда передаете название стандартного (без перехода на летнее время) часового пояса. В вашем случае это "Тихоокеанское стандартное время".

Чтобы найти эти имена, загляните в реестр вашей машины с помощью Regedit.exe. Перейдите в HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Часовые пояса. Помните, что этот список считается надежным только для Windows Vista и выше, ваш код не будет работать хорошо для более ранних версий (2000 и XP). Единственная функция, которая отсутствует - это историческая информация о предыдущих изменениях правила перехода на летнее время. Раздел "Динамический DST". На машине также должен быть включен Центр обновления Windows для получения обновлений этих правил.

И, конечно, он не отслеживает местные политические решения о правилах перехода на летнее время. Распространен в США, например, для округов в штатах Индиана, Аризона и племена американских индейцев.

0 голосов
/ 28 февраля 2011

Поскольку вы уже знаете зону и у вас есть время UTC в объекте TimeZoneInfo, после преобразования примените метод IsDaylightSavingTime (UTCDateTime), чтобы определить, применяется ли стандартное или летнее время к местному времени.* Если вам нужно имя для соответствующего местного времени (например, PST или PDT), вы можете получить его из свойств StandardName и DaylightName.

В онлайн-документации Microsoft есть некоторые предупреждения относительно поведения в неоднозначное время иПлатформа Windows XP.

0 голосов
/ 28 февраля 2011

Я не думаю, что это возможно, учитывая информацию, которую вы имеете.Даже если вы знаете местоположение, проблема в том, что часовые пояса не являются отображением 1: 1 для конкретной страны, поэтому вы не можете предполагать , какой часовой пояс будет.

ТамСуществуют ли веб-сервисы, которые позволяют запрашивать информацию о часовом поясе на основе города / почтового индекса и другую информацию, которая может быть вашей единственной альтернативой.

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