DSTを使用して、現地時間で定義された時間オブジェクトを受け取っているという問題があります。ここで、受信時刻を DST なしのタイムゾーンとしてデータベースに保存します。年に一度、変換が正しくない時間が 1 時間あります。午前 2:00 に、時計は着信 DST タイムゾーンの午前 1:00 に設定されます (冬時間への切り替え時間)。これを現地時間 (つまり GMT) の午前 2 時に修正します。午前 2 時 15 分に受信したパケットを再度 2 時 15 分に修正します。しかし、今は 1:15 ではなく 2:15 になっています。原則として、現在、システムの時間は 2 倍になっています。Java グレゴリオ暦は、現在の現地時間を考慮したタイムゾーン間の変換を行うことができません (2 倍の時間を考慮する必要があるかどうかを判断するため)。
着信 DST タイムゾーンを DST 以外のタイムゾーンに変換するコードは次のとおりです。
public static GregorianCalendar getCal(XMLGregorianCalendar c)
{
GregorianCalendar toGregorianCalendar = c.toGregorianCalendar();
TimeZone tz = TimeZone.getTimeZone("GMT+1");
toGregorianCalendar.setTimeZone(tz);
toGregorianCalendar.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
return toGregorianCalendar;
}
これは、冬時間に戻る 1 時間を除いて、一年中問題なく機能しているようです... この心の曲がりの問題について何か考えはありますか?