【发布时间】:2023-03-10 15:15:02
【问题描述】:
以下代码会产生意想不到的行为:
我期待Calendar 最后返回相同的getTimeInMillis 值(在这种情况下为1469008800000),它们应该是equal。 - 但他们不这样做......
我认为这与http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827490 有关,但在setTimeZone 之后调用get 并没有改变任何如“WORK AROUND”(“更改时区后,我们必须调用一些读取方法” )...
或者“WORK AROUND”是错误的,必须在使用setTimeZone 之前调用一些get 方法之前?
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));
输出:
creation: true
1469008800000
get: true
setTimeZone: false
get: false
1469008800000
1469016000000
end: false
【问题讨论】: