2016-11-02 19 views
1

現地時間で日時の値を表示しようとしています。デフォルトでは、Azure SQLデータベースは日付と時刻をUTCで保存しますが、これを回避する方法はありません。 (これは、敷地内のSQL Serverから移行する際に苦労しました)中央ヨーロッパ時間に格納された時間値を表示したいと思います。Azure SQLの現地時間を表示

現地時間は11:30(CET)です。 UTC時間は10:30です。

DECLARE @TestTime DATETIME; 
SET @TestTime = '2016-11-02 10:30:00' 

SELECT @TestTime 
--Returns 2016-11-02 10:30:00 
SELECT @TestTime AT TIME ZONE 'Central European Standard Time' 
--Returns 02 November 2016 10:30:00 +01:00 

何とか2016-11-02 11:30:00に戻る必要があります。今すぐ楽しい部分のために:

here示唆されているとおり:

SELECT convert(DATETIME,@TestTime AT TIME ZONE 'Central European Standard Time',1) 
--Returns 2016-11-02 09:30:00 So instead of adding the timezonedifference it subtracts it. 

これは動作しますが、私が病気になります:

SELECT DATEADD(MINUTE,DATEPART(tz,@TestTime AT TIME ZONE 'Central European Standard Time'),@TestTime) 
--Returns 2016-11-02 11:30:00 

同様のソリューションは、hereが示唆されているが、それはで遊びます文字列演算。私の疑惑は、AT TIME ZONEで何かが間違っていることです。それは10時30分+1ではなく、11時30分+1を表示する必要がありますか?

現地時間でUTC時刻を表示する方法はありませんか?この「ハッキング」は非常に汚れていると感じています。特に、Microsoftの修正やバグの導入など、いつでも問題が発生する可能性があります。

ありがとうございます!

+0

最終的にローカル日付時刻を表示しようとしていますか? –

+0

@drediske [CET](https://www.timeanddate.com/time/zones/cet)にあります。この例で見たいのは11:30です。 (実際に私のdbには、他のいくつかのタイムゾーンのユーザーがいますし、夏時間も再生されるので、少し複雑です。)それは、保存されたUTC時間値を希望のローカル時間に変換できることにまで沸きます。 – vacip

+0

私はこれらの非コメント-1を愛しています...もし私が投票者が私を啓発すれば、質問を改善したいと思います。 – vacip

答えて

3

AT TIME ZONE文は、異なる動作実行:

  1. アサートへのdatetime(又はdatetime2)はこうしてそのゾーンの正しいオフセットをルックアップする、特定の時間帯にある正しいオフセットを適用してdatetimeoffsetの値を返します。

  2. 異なるタイムゾーンにdatetimeoffset値は、時間に正確なポイントを突き止めるためのソース値からオフセットを用い変換するために、その後、要求されたタイムゾーンのオフセット新しいルックアップし、それを適用すること。これにより、ローカル時刻とオフセットが元の時刻と異なる可能性がありますが、同じ瞬間を表すdatetimeoffsetが返されます。

最初の部分のみを使用しています。 datetimeをUTCから特定のタイムゾーンに変換するには、の両方を使用する必要があります。

SELECT @TestTime AT TIME ZONE 'UTC' AT TIME ZONE 'Central European Standard Time' 

最初AT TIME ZONE入力datetimeオフセット用+00:00を有するdatetimeoffsetその結果、UTCであると主張しています。 2番目のAT TIME ZONEは、それを要求されたタイムゾーンに変換します。

+1

また、ブダペストにいるとあなたのプロフィールに気づきましたので、代わりに "中欧標準時"ゾーンを使用する方が正しいでしょう。この場合、IDに「an」以外の違いはありません。 [このマッピング](http://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml)を参照してください。 –

+0

うわー、ありがとう!少し奇妙ですが、あなたの説明には実際には意味があります。そして、「中欧標準時」に対するもう一つの大きな感謝、私はあなたの知識の前に弓を掛けます。 :) – vacip

関連する問題