2017-09-24 20 views
0

複数のタイムゾーンのユーザーを処理し、特定のタイムゾーンで日付を正しく表示する必要があるアプリケーションを作成しています。複数のタイムゾーンを処理する複数のタイムゾーンを扱う

私が得たものの例として、以下のコードを作成しましたが、タイムゾーンの問題を処理する正しい方法については少し混乱しています。

データベース内のすべての日付をUTCとして保存し、それに応じてAT TIME ZONEを使用するか、別の方法で考えてください。

Create Table #Test 
(
    SampleDate datetimeoffset(7) 
) 

Create Table #Test2 
(
    SampleDate datetimeoffset(7) 
) 

Create Table #Test3 
(
    SampleDate datetime 
) 

insert into #Test select getdate() 
insert into #Test2 select getdate() AT TIME ZONE 'AUS Eastern Standard Time' 
insert into #Test3 select getdate() 


select 
    SampleDate, 
    SampleDate AT TIME ZONE 'AUS Eastern Standard Time', 
    SampleDate AT TIME ZONE 'AUS Central Standard Time', 
    SampleDate AT TIME ZONE 'Aus Central W. Standard Time' 
from #Test 

select 
    SampleDate, 
    SampleDate AT TIME ZONE 'AUS Eastern Standard Time', 
    SampleDate AT TIME ZONE 'AUS Central Standard Time', 
    SampleDate AT TIME ZONE 'Aus Central W. Standard Time' 
from #Test2 

select 
    SampleDate, 
    SampleDate AT TIME ZONE 'AUS Eastern Standard Time', 
    SampleDate AT TIME ZONE 'AUS Central Standard Time', 
    SampleDate AT TIME ZONE 'Aus Central W. Standard Time' 
from #Test3 

drop table #Test 
drop table #Test2 
drop table #Test3 

試験結果

2017-09-24 10:59:47.4233333 +00:00 
2017-09-24 20:59:47.4233333 +10:00 
2017-09-24 20:29:47.4233333 +09:30 
2017-09-24 19:44:47.4233333 +08:45 

Test2をが

2017-09-24 10:59:47.4230000 +10:00 
2017-09-24 10:59:47.4230000 +10:00 
2017-09-24 10:29:47.4230000 +09:30 
2017-09-24 09:44:47.4230000 +08:45 

結果Test3はは、SQL Azureのデータベースは常にUTC時間を使用

2017-09-24 10:59:47.423 
2017-09-24 10:59:47.423 +10:00 
2017-09-24 10:59:47.423 +09:30 
2017-09-24 10:59:47.423 +08:45 
+0

異なるタイムゾーンが必要な場合は、 'datetimeoffset'を使用してください。それがそこにあるのです。 –

+0

ありがとう@GordonLinoffが、テーブルに何を保存する必要がありますか?常にUTCを保存するのですか、特定のユーザーの日付/時刻とオフセットを保存しますか? – Philip

+0

。 。ああ、それは彼らがどのように使われているかによって決まります。私はそれらを同じタイムゾーンに格納する傾向があると思うが、それらを複数の現地時間で保存する正当な理由がある。 –

答えて

0

結果。そのため、datetimeoffsetを使用する必要があります。

また、getdate()を使用する代わりにsysdatetimeoffset()を使用してシステム日付を取得する必要があります。

データベーステーブルから日付を取得するときは、「AT TIME ZONE」を使用する必要があります。

これが役に立ちます。

関連する問題