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





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