Конвертировать UT C в нужный часовой пояс - PullRequest
0 голосов
/ 18 января 2020

Я работаю на SQL Server 2016+ и пытаюсь преобразовать UT C datetime в целевое datetime. Мои даты UT C не содержат информации о смещении; Как я могу преобразовать его в целевой часовой пояс?

Я использую синтаксис AT TIME ZONE, но, поскольку у меня есть дата-время без смещения, он преобразует его в datetimeoffset. Я также попытался поместить синтаксис AT TIME ZONE во внутренний запрос, например сначала преобразовать дату и время в дату и время со смещением, а затем преобразовать его во внешний запрос в целевой часовой пояс, используя AT TIME ZONE 2 раза, как показано ниже:

SELECT 
    DataTimeStamp AT TIME ZONE 'Mountain Standard Time' [LocalTime],
    *
FROM 
    (SELECT 
         DateAdd(Minute, DateDiff(Minute, 0, i.DataTimeStamp) / 60 * 60, 0) AT TIME ZONE 'Mountain Standard Time' as 'DataTimeStamp' .....) t

Выходные данные 2020-01-15 07: 00: 00.000 -07: 00, я ожидаю, что 2020-01-15 00: 00: 00.000

1 Ответ

0 голосов
/ 18 января 2020

Сначала определите часовой пояс значений даты и времени как ut c (AT ut c), а затем рассчитайте местный часовой пояс с последующим (AT timezone). Результатом является datetimeoffset, так как вы хотите локальное datetime, приведите datetimeoffset к datetime

select 
cast('20200118 10:00:00' as datetime)  AT TIME ZONE 'UTC' AT TIME ZONE 'Mountain Standard Time', ----utc as base timezone of datetime value then from utc to mountain st , datetimeoffset
cast(cast('20200118 10:00:00' as datetime)  AT TIME ZONE 'UTC' AT TIME ZONE 'Mountain Standard Time' as datetime) --datetime at local::mountain st timezone
...