Joda-Timeを使用して夏時間(DST) 時間前後の日付と時刻を解析および生成する際に、次の問題があります。以下に例を示します (2008 年 3 月 30 日はイタリアの夏時間の変更であることに注意してください)。
DateTimeFormatter dtf = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
DateTime x = dtf.parseDateTime("30/03/2008 03:00:00");
int h = x.getHourOfDay();
System.out.println(h);
System.out.println(x.toString("dd/MM/yyyy HH:mm:ss"));
DateTime y = x.toDateMidnight().toDateTime().plusHours(h);
System.out.println(y.getHourOfDay());
System.out.println(y.toString("dd/MM/yyyy HH:mm:ss"));
次の出力が得られます。
3
30/03/2008 03:00:00
4
30/03/2008 04:00:00
時間を解析すると、時間は 3 になります。私のデータ構造では、真夜中の時刻を格納する日を保存し、その日の各時間 (0-23) に何らかの値を持っています。次に、日付を書き出すときに、完全な日付時刻を再計算して、午前 0 時と正時を作ります。真夜中までの 3 時間を合計すると、04:00:00 になります。もう一度解析すると、4 時間になります。
私の間違いはどこですか?解析時に 2 時間を取得する方法や、印刷時に 3 時間を取得する方法はありますか?
また、手動で出力を作成しようとしました:
String.format("%s %02d:00:00", date.toString("dd/MM/yyyy"), h);
しかし、この場合、時間 2 に対して、有効な日付ではない 30/03/2008 02:00:00 を生成し (時間 2 が存在しないため)、解析できなくなります。
よろしくお願いいたします。フィリッポ