TimeZoneInfo и коды стран - PullRequest
       32

TimeZoneInfo и коды стран

7 голосов
/ 03 августа 2009

Я ищу возможность реализовать функцию с сигнатурой примерно так:

bool IsTimeZoneValid(string countryCode, DateTime localTime);

Цель состоит в том, чтобы определить, есть ли в стране часовой пояс, в котором будет действовать местное время, учитывая, что мы знаем текущее время UTC. Скажем, ради аргумента, что «действительный» означает, что при преобразовании в UTC время составляет +/- 30 минут от того, что мы считаем временем.

Например, допустим, что в настоящее время 03/08/2009 18:25:00 UTC, а затем при следующем вызове метода для Австралии он должен вернуть true, поскольку это допустимое время в зоне "Восточное стандартное время" :

IsTimeZoneValid("AU", DateTime.Parse("04/08/2009 03:25:00"));

Однако следующий звонок для Франции должен завершиться неудачей, поскольку это недопустимое время во часовом поясе Франции.

IsTimeZoneValid("FR", DateTime.Parse("04/08/2009 03:25:00"));

Это должно быть точным, учитывать летнее время и т. Д.

.NET 3.5 включает новый класс TimeZoneInfo, который может многое сделать для меня, если я знаю, какие часовые пояса существуют в конкретной стране, но я не могу найти какой-либо встроенный поиск для этого , Я что-то упустил или мне придется вручную создать таблицу сопоставлений страны и часового пояса?

Повторим, мой вопрос: учитывая код страны, как я могу получить список часовых поясов. Кроме того, есть ли другой способ приблизиться к этому, что я пропустил?

1 Ответ

5 голосов
/ 03 августа 2009

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

Этот класс работает только для местного часового пояса и любых предварительно определенных часовых поясов. Если вы хотите использовать это для других часовых поясов, необходимо добавить параметры реестра на машину для всех необходимых часовых поясов или создать пользовательскую информацию о часовом поясе с помощью CreateCustomTimeZone.

http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx?ppud=4 http://msdn.microsoft.com/en-us/library/bb384268.aspx

...