0

ASP.NET3.5とSQLServer2008を使用してカレンダーWebサイトを作成していますが、タイムゾーンを可能な限り最善の方法で処理したいと考えています。私はこれらの情報源を読みました:

夏時間とタイムゾーンのベストプラクティス

http://noda-time.blogspot.com/

http://msdn.microsoft.com/en-us/library/ms973825.aspx

私はすべての一般的な情報を入手しましたが、これを実際のコードに変換するのに苦労しています。私のためにコードを書く人を探していませんが、この非常に特殊なケースで他の人が何をしているのかを知っていれば役立ちます(カレンダーアプリ、イベントの日付/時刻、「東部午後5時」は常に「東部午後5時」である必要があるためルールが変更されます)。

.NET DateTimeOffsetクラスとTimeZoneInfoクラスを使用していますか?「2011年1月2日に存在したルールを使用してこのUTC時刻をESTに変換する」のようなものをサポートしているとは思いません。これは、タイムゾーンを「正しく」処理するカレンダーアプリを作成するために必要な制御レベルだと思います。また、そのライブラリに関する例や議論はほとんど見つからないため、これを行っているすべての人がNodaTimeを使用しているとは思いません。おそらくJavaバージョンがよく使われていますが、多くのアプリが.NETで書かれているので、何をしているのでしょうか。

4

1 に答える 1

0

これが正しい答えだとは思っていませんが、答えとして投稿する方が良いと思いました。偶然にも、これは正しいと思います。また、この方法で読みやすく、フォローしやすいからです。

私が正しい方向に向かっているかどうか教えてください:

  1. DateTimeOffsetクラスとTimeZoneInfoクラスを使用する

  2. データベースにDateTimeOffset値とオフセットを保存します。TimeZoneInfo.id(tz id)も保存します。

  3. データベースの値を使用する前に、常に保存されたオフセットを現在のTimeZoneInfoオフセットと比較し、その差によってDateTimeOffset値を調整してください。これは、「政府が規則を変更した」問題を修正し、「東部標準時午後4時」を「東部標準時午後4時」として維持するものです(新しい規則のためにUTCからのオフセットが変更された場合でも)。

  4. 特定の日時または範囲を検索するクエリを機能させるには、ルールが(政府によって)変更されるたびに、データベース内のすべてのレコードを調べて「修正」します。修正は上記の#3で使用した手順と同じですが、修正後に新しい値を保存します。

これは他の人がしていることですか?Windows Updateが新しいルールで適用されるのとほぼ同時にそれを行う必要があるので、#4に夢中ではありません... Windows Updateとデータベースの更新が完了するまでの間はいつでも、無効なクエリ結果が生成される可能性があります。それが「定期メンテナンス」の目的だと思いますが、現時点ではそれほど厳格な方針はありません。

于 2013-02-21T21:22:20.047 に答える