Определение удаленного перехода на летнее время в sql-сервере
Я хочу определить, активна ли летнее время, но в регионе, отличном от того, где находится мой сервер.
Моя проблема в том, что я хочу проверить летнее время в Лондоне, а мой сервер – в Канаде; можно ли найти летнее время в другом часовом поясе?
- Летнее время, не работающее в TimeZoneInfo, при переходе с UTC на локальный
- Определите текущий статус DST, когда я не наблюдаю DST в своем часовом поясе (SQL Server)
- Как сохранить часовой пояс в SQL Server 2005
- Amazon RDS - есть ли временные решения для изменения часового пояса базы данных в SQL Server?
- Сохранять текущее время в соответствии с часовым поясом клиентской стороны в sqlServer
- Есть ли надежный способ конвертировать unzoned datetime в UNIX time_t?
- История MS SQL Server для TimeZones и DST (нужно ли изобретать колесо?)
- Преобразование в datetimeoffset из SQL-запроса в локальное время на основе TimeZoneInfo
- сравнить индийское время
- конвертировать datetime в значение UTC mssql
- Работа с UTC, TimeZone и создание GROUP BY с помощью LocalTime
- Использование часовых поясов на веб-сайте с использованием ASP.Net 3.5 / SQL Server 2005
- Получение локальной даты / времени для определенного часового пояса в SQL Server
Вам нужно развернуть таблицу 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