beschädigt. Würdest du dies als einen Fehler in java.util.Calendar betrachten?Java-Kalender ist durch Einstellung von HOUR_OF_DAY
Ein Kalenderobjekt in der lokalen (PDT) Zeitzone wird instanziiert und mit dem Nulldatum (Epoch Start) versehen. Dieser Wert wird wie erwartet beibehalten, nachdem die Millisekunde, Sekunde und Minute des Kalenders auf Null gesetzt wurden. Sobald jedoch die Stunde des Tages auf Null gesetzt ist, wird die Zeit nicht Null. Es erwirbt den Wert -57600000ms = -16 Stunden. Dies kann ein Zeitzonenfehler sein, aber der Wert -16 Stunden entspricht nicht dem lokalen -7 Stunden (PDT) -Vergleich zum Zeitpunkt der Ausführung. Ohne Sommerzeit ist der Zeitversatz PST (-8 Stunden) und entspricht nicht -16 Stunden.
Wenn die Einstellung der Stunde die Zeitzonen-Offsets beeinflusst, sollten Sie auch die Minuteneinstellung erwarten, weil: (von https://en.wikipedia.org/wiki/Time_zone) Mehrere Stellen "halbstündige Abweichungen von der Standardzeit verwenden und einige" ... "verwenden Viertelstunden-Abweichungen. "
Der Code:
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());
Der Ausgang:
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
Ich habe Beschreibungen anderer Fehler in java.util.Calendar gefunden, aber ich glaube nicht, das bekannt ist.
- Danke für Ihre Zeit.