Der folgende Code erzeugt unerwartetes Verhalten: Ich erwarte, dass beide Calendar
denselben Wert für getTimeInMillis
am Ende (1469008800000
in diesem Fall) und sie equal
sein. - aber sie tun nicht ...Wie wird der Kalender nach der Verwendung von setTimeZone repariert?
Ich denke, das somethig mit http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827490 zu tun hat, aber get
nach setTimeZone
does'nt Änderung etwas Aufruf wie „Umgehen“ geschrieben ("nach der Zeitzone zu ändern, müssen wir rufen einige Leseverfahren ") ...
Oder ist die‚Umgehen‘falsch und man hat einige get
Methode vor mit setTimeZone
anrufen?
Calendar calendar1 = Calendar.getInstance(TimeZone.getTimeZone("CET"));
Calendar calendar2 = Calendar.getInstance(TimeZone.getTimeZone("CET"));
calendar1.set(2016, 07 - 1, 20, 12, 00, 0);
calendar2.set(2016, 07 - 1, 20, 12, 00, 0);
calendar1.set(Calendar.MILLISECOND, 0);
calendar2.set(Calendar.MILLISECOND, 0);
System.out.println("creation: " + calendar1.equals(calendar2));
System.out.println(calendar1.getTimeInMillis());
System.out.println("get: " + calendar1.equals(calendar2));
calendar1.setTimeZone(TimeZone.getTimeZone("Z"));
calendar2.setTimeZone(TimeZone.getTimeZone("Z"));
System.out.println("setTimeZone: " + calendar1.equals(calendar2));
calendar1.get(Calendar.YEAR);
calendar2.get(Calendar.YEAR);
System.out.println("get: " + calendar1.equals(calendar2));
System.out.println();
System.out.println(calendar1.getTimeInMillis());
System.out.println(calendar2.getTimeInMillis());
System.out.println("end: " + calendar1.equals(calendar2));
Ausgang:
creation: true
1469008800000
get: true
setTimeZone: false
get: false
1469008800000
1469016000000
end: false
Haben Sie den Unterschied zwischen diesen Werten gesehen? 7200000ms also genau 2 Stunden. – eldo
@CMax: Nach der 6. Zeile sind beide Kalender gleich ... –
Tut mir leid, habe nicht bemerkt, an dieser Stelle ist meine Antwort nicht im Thema, aber es wird stehen, dass auch ohne einen Bug jeder Art die beiden Werte nicht gleich sein könnten , nur die Unterschiede sollten viel kleiner sein. – CMax