加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java GregorianCalendar更改TimeZone

发布时间:2020-12-15 00:59:45 所属栏目:Java 来源:网络整理
导读:我正在尝试设置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,
我正在尝试设置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类从Calendar继承其 get方法,具有以下副作用:

In lenient mode,all calendar fields are normalized.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读