Определение удаленного перехода на летнее время в sql-сервере

Я хочу определить, активна ли летнее время, но в регионе, отличном от того, где находится мой сервер.

Моя проблема в том, что я хочу проверить летнее время в Лондоне, а мой сервер – в Канаде; можно ли найти летнее время в другом часовом поясе?

Вам нужно развернуть таблицу DST и посмотреть время DST для региона, который вы хотите. DST публикуются различными организациями и периодически обновляются. То, что вам нужно понять, заключается в том, что DST не может определяться алгоритмом, его можно искать только в соответствии с различными законодательными органами для различных регионов и часто меняться. Например, вот текущая таблица DST в 2013 году . Поддержание текущей таблицы поиска DST приложения будет периодической задачей для вашего приложения.

Лучше всего было бы использовать одну из двух баз данных часовых поясов .

Однако представляется, что (согласно этому вопросу ) трудно использовать базу данных Microsoft TimeZone из SQL Server, потому что класс TimeZoneInfo помечен атрибутом [HostProtection] с параметром MayLeakOnAbort установленным true.

Я считаю, что возможным решением будет использование классов NodaTime . Они должны быть доступны из SQL CLR и обеспечивать доступ к обеим базам данных.

Я попробую это и обновить здесь, когда закончите.

ОБНОВИТЬ

После борьбы с ограничениями безопасности SQL CLR я пришел к выводу, что такой подход в настоящее время также невозможен.

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

Вот грубая IsDST для SQL Server …

  CAST ((DATEPART (месяц, DATEADD (неделя, -1, <DateTime>)) + 2)% 13/5 AS бит) AS IsDST 

Доходность 0 для стандартного времени 8 ноября – 7 марта и 1 для дневного времени 8 марта – 7 ноября.

На сервере Sql 2016:

С помощью sys.time_zone_info теперь вы можете запросить, если конкретный часовой пояс в настоящее время находится в DST.

 select * from sys.time_zone_info 

Здесь у вас есть пример результата

 name current_utc_offset is_currently_dst Aleutian Standard Time -09:00 1 Hawaiian Standard Time -10:00 0 Marquesas Standard Time -09:30 0 Alaskan Standard Time -08:00 1 
  • TimeZoneCode to TimeZoneInfo
  • SQL Server: преобразовать данные столбца общей даты на сегодняшний день с часовым поясом
  • Нужна функция SQL Server для преобразования локального дат-времени в UTC, который поддерживает DST
  • Время локального отображения Azure SQL
  • Как обновлять данные в sql-сервере от локального до универсального времени
  • Вариант SQL Server от Oracle TZ_OFFSET
  • Давайте будем гением компьютера.