Как определить, указана ли указанная дата в летнем времени для данного часового пояса в.NET 2.0?
Я нахожусь на.NET 2.0, работающем под Medium Trust (поэтому TimeZoneInfo и Registry не допускаются). Я спрашиваю пользователя о двух датах и часовом поясе, и мне очень хотелось бы иметь возможность автоматически определить, нужно ли мне настроить часовой пояс для перехода на летнее время.
Это, вероятно, даже недопустимый сценарий, если у меня нет какой-либо очень надежной поддержки, в виде TimeZoneInfo, для разграничения во всех различных разновидностях часовых поясов.
5 ответов
В.NET 2.0 вы должны написать это самостоятельно. Он включает в себя исследование законов перехода на летнее время в различных регионах и встраивание их в ваши собственные структуры данных. Проблема несколько упрощается, если вы заботитесь только о подмножестве часовых поясов, например, только в США, но если вам нужны все глобальные часовые пояса, у вас много работы, а затем код должен обновляться каждый раз. несколько лет, когда законы меняются. Даже новые объекты часовых поясов в последней версии.NET потребуют обновлений Windows, чтобы сохранить их правильными при изменении законов.
Смотрите здесь, здесь и здесь для получения дополнительной информации.
База данных TZ - это общедоступная база данных о правилах часовых поясов, которая очень хорошо поддерживается. Существует также скомпилированный формат для данных, которые они предоставляют, и есть много библиотек, доступных для чтения скомпилированных данных, таких как эта: ZoneInfo (база данных tz / база данных Olson) .NET API
Ну, так как TimeZoneInfo
исключено, вы, вероятно, не найдете решение в самой структуре (но не цитируйте меня по этому поводу).
В каком случае вы рассматривали возможность отражения TimeZoneInfo
класс и используя то, что вы найдете там?
@ Domenic, я подумал, но я бы предпочел остаться легальным, и я вполне уверен, что в любом случае информация должна быть встроена в платформу или извлечена из реестра каким-то хитрым способом, не требующим разрешений...