6

datetimeoffsetSQL Server 2008 r2 での使用に関して疑問があります。

Web アプリケーションがあり、db サーバーがスペインにあり、クライアントがカナダにあるとします。スペインとカナダの間のタイムゾーンはわかりませんが、スペインでは 5 時間以上かかると思います。そのため、カナダのユーザーは午後 23 時に新しい従業員を追加したいと考えています。[保存] をクリックすると、内部で関数を呼び出してdatatype を持つSYSDATETIMEOFFSET()列を埋めるストアド プロシージャが呼び出されます。CreatedDatedatetimeoffset(7)

この場合、データベースに保存される日時は何になりますか? を確認したいカナダのユーザーに正しい日時を表示するにはどうすればよいCreatedDateですか? これを確認する良い例はありますか?

4

2 に答える 2

13

MSDNによると:

データはデータベースに保存され、UTC と同様にサーバーで処理、比較、並べ替え、およびインデックスが作成されます。タイム ゾーン オフセットは、検索用にデータベースに保存されます。

あなたの例では、データは に変換できるバイナリ形式で保存されます14 Nov 2013 23:00 -5:00。これは、ローカルの日付と時刻に UTC への -5 時間のオフセットを加えたものを意味します (これがカナダのオフセットであるとします)。

このタイプの値を保存するときは、自分でオフセットを指定する必要があります。システムは自動的にオフセットを行いません。

データは UTC 時間として保存されるため、データの比較や並べ替えなどが容易になり、いつでも元の時間オフセットを取得できます。

タイム ゾーン間で比較する必要があるイベントに関する情報を保存する場合は、通常、クライアントの現地時間をオフセットして保存する必要があります。

詳細についてdatetimeoffsetは、MSDNを参照してください。


テーブルを作成してデータを挿入する

create table dto (dto datetimeoffset(7))

insert into dto values (GETDATE()) -- inserts date and time with 0 offset
insert into dto values (SYSDATETIMEOFFSET()) -- current date time and offset
insert into dto values ('20131114 08:54:00 +10:00') -- manual way

データを選択すると、

2013-11-14 07:56:17.2300000 +00:00 -- current time, no offset so useless in this case
2013-11-14 07:56:17.2338125 +11:00 -- current time with my local offset (in Australia)
2013-11-14 08:54:00.0000000 +10:00 -- manually inserted data
于 2013-11-13T20:46:43.507 に答える