Ale*_*yev 7 java timezone date
我正在尝试设置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));
Run Code Online (Sandbox Code Playgroud)
输出:
HOUR: 16
HOUR: 23
Run Code Online (Sandbox Code Playgroud)
由于某种原因,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));
Run Code Online (Sandbox Code Playgroud)
输出:
HOUR: 16
HOUR: 13
Run Code Online (Sandbox Code Playgroud)
这怎么可能?为什么.get方法正在改变对象行为?
Bil*_*ard 10
的GregorianCalendar
类继承其get
从方法Calendar
,其具有以下副作用:
在宽松模式下,所有日历字段都已标准化.
这意味着在对象上调用time
时将重新计算值和所有字段.这可能导致一些不可预测的行为,特别是在与其结合时,其具有一些记录其自身的错误行为.get
Calendar
setTimeZone
归档时间: |
|
查看次数: |
13289 次 |
最近记录: |