0

私は、ブラウンフィールド アプリケーションでユーザー固有のタイム ゾーンを実装するためのソリューションを考え出すことを担当しています。データベースに保存されるすべての日付は、サーバーのローカル時間で保存されます。これらの日付とともに保存されるタイム ゾーンまたはオフセット情報はありません。

これは非常に大規模なアプリケーションであるため、これは大変な作業になると思います。私の懸念は、これを可能な限りリスクを少なくして行うことです。誰もこれを以前にやったことがありますか?もしそうなら、最善のアプローチは何ですか?また、避けるべき落とし穴は何ですか?

現在の考え方は、意味のある時間コンポーネントを持つ日付列のすべてのデータを UTC に変換することです。次に、プレゼンテーション レイヤーで、ユーザーに表示する必要があるときに、datetime オブジェクトを UTC からユーザーのタイム ゾーンに変換する関数を実行する必要があります。

これは、SQL Server 2008 データベースを使用する ASP .NET アプリです。私がこれについて言及するのは、それらのテクノロジーの中に、物事をよりスムーズにするために使用できる、私が知らない便利なツールがあるかもしれないからです.

4

1 に答える 1

1

新しいコードでのこの種の要件は、T-SQLの新しいdatetimeoffsetデータ型にほぼ完全に適合します。しかし、レガシーコードでは、いくつかの問題が発生します。

The Death of DateTimeと呼ばれる新しいdatetimeoffsetタイプに関する良い記事がありますか?これは、日時の問題を非常によく調査します。

要するに、ここにあなたが取り組む必要がある問題があります:

  • どの日付のみのフィールド(つまり、時刻は常に00:00でなければなりません)を除外できますか。
  • 日時が記録されているタイムゾーン
  • 個別の夏時間または夏時間のオフセットがあるタイムゾーン
  • 日付を記録したすべての年の夏時間の正確な日付範囲は何ですか
  • データ内の各日時値のオフセットをどのように計算できますか
  • オフセット変更で重複する時間をどのように解釈しますか

データを分割し、呼び出す各グループのオフセットを計算したら、次のようにします。

TODATETIMEOFFSET (expression , time_zone)

datetimeoffsetを読み取ると、以前と同じように現地時間が取得され、それに加えて、記録されたときのUTCからのオフセットが取得されます。

リモートで記録された日時を昨年のいつかから現地時間に変換する必要がある場合は、時刻が記録されたときのローカルオフセットを知る必要があります。

于 2011-12-22T23:14:41.857 に答える