Определить, активно ли летнее время?SQL Server - PullRequest
1 голос
/ 21 июля 2011

У меня есть таблица с пользователями, смещение времени UTC, и если они соблюдают переход на летнее время. Есть ли встроенный способ получить правильное время пользователя?

Ответы [ 3 ]

1 голос
/ 21 июля 2011

Прямо сейчас я делаю это:

SELECT 
CASE USEDAYLIGHTSAVING
    WHEN 1 THEN
        CASE DATEDIFF(HH,GETUTCDATE(),GETDATE())
                -- I know the server is set to Mountan time and follows daylight saving time
                -- MDT = -6
                -- MST = -7
            WHEN -6 THEN 
                DATEADD(HH,TIMEZONEOFFSET+1,GETUTCDATE())
            ELSE 
                DATEADD(HH,TIMEZONEOFFSET,GETUTCDATE())
        END
    ELSE
            DATEADD(HH,TIMEZONEOFFSET,GETUTCDATE())
    END
FROM 
USERS

Это работает, но если сервер переместился в другой часовой пояс или не последовал за переходом на летнее время, я попался.

0 голосов
/ 06 июня 2019

Это не будет работать во всех случаях, но это быстрое решение для тех, кто в США с DST, определенным между 2-м воскресеньем марта и 1-м воскресеньем ноября.

DECLARE @Date datetime2 = '2018-11-04 02:01:00'

SELECT 
    CASE 
        WHEN @Date between
            DATETIMEFROMPARTS(YEAR(@Date), 3, (8 - DATEPART(WEEKDAY, DATEFROMPARTS(YEAR(@Date), 3, 1))) + 8, 02, 00, 00, 00)
            and
            DATETIMEFROMPARTS(YEAR(@Date), 11, (8 - DATEPART(WEEKDAY, DATEFROMPARTS(YEAR(@Date), 11, 1))) + 1, 02, 00, 00, 00)
        THEN 1
        ELSE 0
    END --Is it dst?
0 голосов
/ 03 апреля 2015

У меня есть таблица с пользователями, смещением времени по Гринвичу, и если они соблюдают переход на летнее время.Есть ли встроенный способ получить правильное время пользователя?

В разных часовых поясах по всему миру ТЛЧ различают по-разному.Они запускаются и останавливаются в разное время дня.Просто иметь смещение и флаг DST недостаточно для надежного преобразования.

Вместо этого вам нужен идентификатор часового пояса , такой как America/Los_Angeles, или один из других в спискездесь .После этого вы можете использовать мой проект поддержки часовых поясов SQL Server для выполнения преобразований.

...