gpt4 book ai didi

Java GregorianCalendar 更改时区

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:06:48 26 4
gpt4 key购买 nike

我正在尝试设置 HOUR_OF_DAY 字段并更改 GregorianCalendar 日期对象的时区。

GregorianCalendar date = new GregorianCalendar(TimeZone.getTimeZone("GMT+10"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));
date.set(Calendar.HOUR_OF_DAY, 23);
//date.get(Calendar.HOUR_OF_DAY);
date.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));

输出:

HOUR: 16
HOUR: 23

由于某些原因,HOUR_OF_DAY 的值在设置不同的时区后不会改变。但是,如果我取消对 HOUR_OF_DAY 的 date.get 的注释,一切都会按预期进行

GregorianCalendar date = new GregorianCalendar(TimeZone.getTimeZone("GMT+10"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));
date.set(Calendar.HOUR_OF_DAY, 23);
date.get(Calendar.HOUR_OF_DAY); // uncommenting this line will is changing the output
date.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("HOUR: " + date.get(Calendar.HOUR_OF_DAY));

输出:

HOUR: 16
HOUR: 13

这怎么可能?为什么 .get 方法正在改变对象行为?

最佳答案

GregorianCalendar类继承其 get Calendar 中的方法,它具有以下副作用:

In lenient mode, all calendar fields are normalized.

这意味着当在 Calendar 对象上调用 get 时,将重新计算 time 值和所有字段。这可能会导致一些不可预测的行为,特别是与 setTimeZone 结合使用时,它有一些 documented buggy behavior。自己的。

关于Java GregorianCalendar 更改时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12137428/

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