SQL Server 2016とAzure SQLに新しいAT TIME ZONE syntaxを使用しようとしています。私はちょうど夏時間のために調整されたdatetime
としてロンドンで現在の時間を取得しようとしています。以下のすべてのコマンドを実行していた時点で、ロンドンの時間は3.27amでした。AT TIME ZONEを使用して指定された時間帯に現在時刻を取得する
最初のステップは、次のように私は首尾よく行うことができます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
です。 datetimeoffset
を取り、ちょうど返すための簡単な方法があります - 私は何かを明らかに欠けているように私は感じ
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
:私は私に私が探している結果を与えるどれも3つの異なるアプローチを、試してみましたそのオフセットの日時部分?
SELECT GETUTCDATE() AT TIME ZONE 'GMT Standard Time'
GETUTCDATE()
がdatetime
を返し、ゾーン情報をオフセット時間がない:
「動作しない」を定義します。 2つの変換ステートメントは私にとって正しいことをしているようです... 03:27に戻るようにしようとするなら、@dtoを設定するときに「GMT Standard time」の代わりにLondon TZを使用してみませんか? –
恐らく、 "うまくいけない"とは言い難いかもしれませんが、私は言葉遣いを変えるために質問を調整しますが、私は03:27の値で日時を取り戻す方法を持っていたいと思います。 「ロンドン」タイムゾーンは表示されません - GMT標準時はロンドンがAFAIKにいるタイムゾーンです。 – John
SQL 2016インスタンスがインストールされていないため、動作を確認できません。私はTZ情報でWindowsレジストリを見ましたが、GMTが実際にDSTを観察しているように見えます。私があなたのコードで気づいたことの1つは、私がどこでも同じであると期待している 'getUTCdate()'と呼ばれていることです。これをテストするには、次の3つのことを試してみてください: '' GETUTCDATE() '' AT TIME ZONE 'GMT夏時間' ''' GETUTCDATE()をTIME ZONEで'東京標準時 '' 3) '' GETDATE() GMT標準時 ' –