gpt4 book ai didi

java - 使用setTimeZone后如何修复日历?

转载 作者:太空宇宙 更新时间:2023-11-04 12:24:49 25 4
gpt4 key购买 nike

以下代码会产生意外的行为:我希望 Calendar 最后为 getTimeInMillis 返回相同的值(在本例中为 1469008800000),并且它们应相等。 - 但他们不这样做...

我认为这与http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827490有关。但是在 setTimeZone 之后调用 get 不会改变任何内容,如“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

最佳答案

我可以指出,在您提供的代码中,您将两个日历设置为完全相同的表达式,但 Calendar.MILISECONDS 将值从一个调用更改为另一个调用,因为两个调用之间经过了时间。

如果将第二个日历设置为第一个日历,而不是将其设置为 Calendar.MILISECONDS,应该没问题。

编辑:问题编辑后,我的答案不再相关,我保留它的唯一目的是保留其评论部分。

关于java - 使用setTimeZone后如何修复日历?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38481728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com