Использование AT TIME ZONE для получения текущего времени в указанном часовом поясе

Я пытаюсь использовать новый синтаксис 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 и вернуть только часть даты / времени с этим смещением?

8
задан John 4 April 2016 в 04:36
поделиться