IBM JREは、Javaタイムゾーンのマニュアルを参照してタイムゾーンアップデートユーティリティを微とのSimpleTimeZoneクラスを派生することができますが、クラスからオフセットを保持している
...と述べています生のオフセットと呼ばれるGMT、および夏時間の開始および終了ルール スケジュール。 GMTと夏時間のオフセットの履歴変更は処理できません。ただし、夏時間スケジュールが有効になる が開始された年をsetStartYearメソッドで指定できる点が異なります。
これは、アプリケーションが過去の日付/時刻に依存しない場合、これらのオブジェクトが生成された時点で使用しているTimeZoneオブジェクトが最新である場合に問題が発生しないことを意味します。
しかし...
アプリケーションは、歴史的な日付/時刻のデータベースの任意の並べ替えが含まれ、新しいタイムゾーンのルールが有効になるときに、あなたのアプリケーションが誤ってあなたの過去の情報を解釈し、以来、間違った結果を表示した場合使用するTimeZoneオブジェクトは、履歴データが生成されたときに使用されたTimeZoneオブジェクトと同じではありません。
歴史的に正確な日付/時刻を維持することが重要な場合(たとえば、課金資格のパラメータが非常に明確な政府機関への請求記録など)は、過去の履歴データベース内の日付/時刻情報が含まれますが、その時に有効だったタイムゾーン規則を再作成するために使用できる情報も含まれています。解決策はいくつかあります。
のJavaのSimpleTimeZoneクラスを使用すると、タイムゾーンと夏時間規則の単一セットでTimeZoneオブジェクトを作成できるようになりますコンストラクタを持っています
のSimpleTimeZone(rawOffset、文字列IDをint型、int型は、startMonth、int型startDay、INT startDayOfWeek、int型のstartTime、 INT endMonth、INT endDay、INT endDayOfWeek、INT endTimeは、dstSavingsをINT)
構築 開始するための所定のGMTからのベースタイムゾーンオフセット、タイムゾーンID、およびルールでSimpleTimeZone夏時間を終了します。
したがって、データベースにすべての日付/時刻情報がUTCタイムスタンプとして保存されていることを確認してください。私は、タイムスタンプをデータベースに "Modified Julian Day Numbers"として保存して、カレンダーの日付と時刻をミリ秒の精度で二重に格納することができます。変更ユリウス日数は常にUTCで定義されます。しかし、あなたの情報がUTCにある限り、あなたは標準です。
次に、データベースでこれまで使用されたSimpleTimeZoneオブジェクトを作成するために必要なすべての引数のテーブルを作成するか、好みのオブジェクト永続性APIを使用してデータベースで使用されるすべてのオブジェクトを保持することができます。関連するデータに使用されるタイムゾーン規則を示す外部キーを使用すると、データベースアプリケーションが歴史的に正確な現地時間を報告できることを保証できます。
しかし、TimeZoneクラスはどのように正しい答えを出すでしょうか?タイムゾーンに変更があり、古いバージョンのクラスであれば、それは間違っていないでしょうか? –
ああ、確かに分からなかったので、実際に私は投稿したくなかった...おそらく、スタックオーバー。私のためにやった... – Pieter