Я пытаюсь использовать новый синтаксис AT TIME ZONE в SQL Server 2016 и Azure SQL. Я просто пытаюсь получить текущее время в Лондоне как datetime
с поправкой на летнее время. Во время выполнения всех команд ниже, время в Лондоне было 3,27 утра.
Первый шаг - получить datetimeoffset
, что я могу успешно сделать следующим образом:
DECLARE @dto datetimeoffset
SET @dto = (SELECT GETUTCDATE() AT TIME ZONE 'GMT Standard Time')
SELECT @dto
Это возвращает значение, как я и ожидал:
2016-04-04 02:27:54.0200000 +01:00
Далее Я хочу преобразовать это в datetime
, чего ожидают мои приложения. Я пробовал три разных подхода, ни один из которых не дал мне результата, который я искал:
SELECT SWITCHOFFSET(@dto,'+00:00')
-- Returns 2016-04-04 01:27:54.0200000 +00:00
SELECT CONVERT(datetime, @dto)
-- Returns 2016-04-04 02:27:54.020
SELECT CONVERT(datetime2, @dto)
-- Returns 2016-04-04 02:27:54.0200000
Я чувствую, что упускаю что-то очевидное - есть ли простой способ взять datetimeoffset
и вернуть только часть даты / времени с этим смещением?