質問:これはjava.util.Calendarのバグだと思いますか?HOUR_OF_DAYを設定するとJava Calendarが破損する
ローカル(PDT)タイムゾーンのCalendarオブジェクトがインスタンス化され、ゼロ(エポック開始)日付が割り当てられます。この値は、カレンダーのミリ秒、秒、および分を0に設定した後、予期したとおりに維持されます。ただし、時刻がゼロに設定されると、時間はゼロ以外になります。 は、値-57600000ms = -16時間を取得します。これはタイムゾーンバグかもしれませんが、-16時間の値は実行時に現地の-7時間(PDT)オフセットに対応していません。夏時間がなければ、時間オフセットはPST(-8時間)であり、-16時間にも対応していません。
タイムゾーンのオフセットに影響する時間を設定すると、分を設定する必要があります。(https://en.wikipedia.org/wiki/Time_zone)複数の場所では、標準時間からの30分のずれを使用し、いくつかの "..."四分の一時間偏差。
コード:
Date epochStart = new Date(0L);
System.out.println("epochStart=" + epochStart.getTime());
Calendar calendar = Calendar.getInstance();
calendar.setTime(epochStart);
System.out.println("epochStart in calendar=" + calendar.getTime().getTime());
calendar.set(Calendar.MILLISECOND, 0);
System.out.println("ms cleared in calendar=" + calendar.getTime().getTime());
calendar.set(Calendar.SECOND, 0);
System.out.println("second cleared in calendar=" + calendar.getTime().getTime());
calendar.set(Calendar.MINUTE, 0);
System.out.println("minute cleared in calendar=" + calendar.getTime().getTime());
calendar.set(Calendar.HOUR_OF_DAY, 0);
System.out.println("hourOfDay cleared in calendar=" + calendar.getTime().getTime());
出力:
epochStart=0
epochStart in calendar=0
ms cleared in calendar=0
second cleared in calendar=0
minute cleared in calendar=0
hourOfDay cleared in calendar=-57600000
私はjava.util.Calendarの中で他のバグの記述を見つけたが、私はこれが知られているとは思いません。
- お時間をいただきありがとうございます。