Как я могу определить, находится ли данная дата в летнем времени для данного часового пояса в .NET 2.0?

Я использую .NET 2.0, работаю под управлением Medium Trust (поэтому TimeZoneInfo и реестр не разрешены). Я прошу пользователя указать две даты и часовой пояс, и мне бы очень хотелось иметь возможность автоматически определять, нужно ли мне настраивать часовой пояс для перехода на летнее время.

Вероятно, это даже недопустимый сценарий, если у меня нет очень надежной поддержки, а-ля TimeZoneInfo, чтобы в первую очередь различать все разновидности часовых поясов.


person bdukes    schedule 04.09.2008    source источник


Ответы (5)


В .NET 2.0 вы должны кодировать это самостоятельно. Это включает в себя изучение законов о переходе на летнее время в различных регионах и встраивание их в ваши собственные структуры данных. Проблема несколько упрощается, если вы заботитесь только о подмножестве часовых поясов, например только в США, но если вам нужны все глобальные часовые пояса, у вас много работы, и тогда код нужно обновлять каждый раз. несколько лет, когда законы меняются. Даже новые объекты часовых поясов в последней версии .NET потребуют обновлений Windows, чтобы поддерживать их правильность по мере изменения законов.

Посмотрите здесь, здесь и здесь для получения дополнительной информации.

person Eric Z Beard    schedule 04.09.2008
comment
Не говоря уже о том, что если вы хотите точно определить статус перехода на летнее время для исторических дат, помимо необходимости постоянно обновлять информацию, вы должны заархивировать все правила перехода на летнее время, которые когда-либо применялись в этих часовых поясах. Ни одна операционная система или библиотека, о которых я знаю, в настоящее время не делают этого. - person Mihai Limbășan; 01.10.2008

База данных TZ – это общедоступная база данных правил часовых поясов, которая поддерживается в очень хорошем состоянии. . Также существует скомпилированный формат предоставляемых ими данных, и существует множество библиотек для чтения скомпилированных данных, например эта: ZoneInfo (база данных tz/база данных Olson) .NET API

person Daryl    schedule 01.10.2008

Отличная библиотека часовых поясов здесь: TZ4Net

person Chris Shaffer    schedule 01.10.2008

Что ж, поскольку TimeZoneInfo исключено, вы, вероятно, не найдете решения в самой структуре (но не цитируйте меня по этому поводу).

В таком случае, рассматривали ли вы возможность отразить класс TimeZoneInfo и использовать то, что вы там найдете?

person Domenic    schedule 04.09.2008

@Доменик, я думал, но предпочитаю оставаться в рамках закона, и я уверен, что информацию в любом случае придется встраивать во фреймворк или выхватывать из реестра каким-то тайным способом. что не требует разрешений...

person bdukes    schedule 04.09.2008