104

私は通常、データベースの読み取り/書き込みの直前に DateTime 変換 (UTC から現地時間、および現地時間から UTC) を行う「インターセプター」を持っているので、DateTime.Now心配することなくシステム全体で (派生と比較) を使用できます。タイムゾーンについて。

シリアル化とコンピューター間でのデータの移動については、日時が常に UTC であるため、気にする必要はありません。

日付 (SQL 2008 - datetime) を UTC 形式で保存し続ける必要がありますか、それともDateTimeOffset(SQL 2008 - datetimeoffset) を使用して保存する必要がありますか?

データベースの UTC 日付 (datetime タイプ) は機能しており、長い間知られていますが、なぜそれを変更するのですか? 利点は何ですか?

私はすでにこのような記事を調べましたが、100% 確信しているわけではありません。何かご意見は?

4

3 に答える 3

140

UTC を単独で使用できないという大きな違いが 1 つあります。

  • こんなシチュエーションなら

    • 1 台のサーバー複数のクライアント(すべて地理的に異なるタイムゾーン)
    • クライアントは、日時情報を含むいくつかのデータを作成します
    • クライアントはすべてを中央サーバーに保存します
  • それで:

    • datetimeoffset には、クライアントのローカル時刻と、UTC 時刻へのオフセットも格納されます
    • すべてのクライアントは、すべてのデータの UTC 時間と、情報が発生した場所の現地時間を知っています。
  • しかし:

    • UTC datetime は UTC datetime のみを格納するため、データが発生したクライアントの場所の現地時間に関する情報はありません
    • 他のクライアントは、datetime 情報の発信元である場所の現地時間を知りません。
    • 他のクライアントは、データが発生したクライアントのローカル時間ではなく、データベースから (UTC 時間を使用して) ローカル時間を計算することしかできません。

簡単な例は航空券の予約システムです... 航空券には次の 2 つの時間が含まれている必要があります。

于 2012-02-16T16:18:32.647 に答える
25

すべての履歴時間にUTCを使用することは絶対に正しいです(つまり、イベントの記録が発生しました)。UTCから現地時間に移動することは常に可能ですが、その逆は常に可能ではありません。

いつ現地時間を使用しますか?この質問に答えてください:

政府が突然夏時間を変更することを決定した場合、このデータをそれに合わせて変更しますか?

答えが「はい」の場合にのみ現地時間を保存します。明らかに、それは将来の日付にのみ適用され、通常は何らかの形で人々に影響を与える日付にのみ適用されます。

なぜタイムゾーン/オフセットを保存するのですか?

まず、アクションを実行したユーザーのオフセットを記録する場合は、それを実行するのがおそらく最善です。つまり、ログイン時にそのユーザーの場所とタイムゾーンを記録します。

次に、表示用に変換する場合は、そのタイムゾーンのすべてのローカルタイムオフセット遷移のテーブルを用意する必要があります。6か月前の日付/時刻を表示している場合、オフセットは異なる。

于 2011-03-10T19:00:22.990 に答える
21

DATETIMEOFFSET を使用すると、現地時間と UTC 時間を 1 つのフィールドに格納できます。

これにより、表示用にデータを処理する必要がなく、ローカル時間または UTC 時間で非常にシンプルかつ効率的なレポートを作成できます。

最も一般的な 2 つの要件は、ローカル レポートの現地時間とグループ レポートの UTC 時間です。

現地時間は DATETIMEOFFSET の DATETIME 部分に格納され、UTC からの OFFSET は OFFSET 部分に格納されるため、変換は簡単で、データの取得元のタイムゾーンを知る必要がないため、すべてデータベース レベルで実行できます。 .

ミリ秒までの時間を必要としない場合、たとえば分または秒までの時間を必要としない場合は、DATETIMEOFFSET(0) を使用できます。DATETIMEOFFSET フィールドは、DATETIME と同じ 8 バイトのストレージしか必要としません。

したがって、UTC DATETIME ではなく DATETIMEOFFSET を使用すると、レポートの柔軟性、効率、および簡素化が向上します。

于 2013-06-08T17:35:00.323 に答える