我对Calendar.getInstance(TimeZone.getTimeZone("UTC"))方法调用得到的结果感到困惑,它正在返回IST时间.
这是我使用的代码
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
Run Code Online (Sandbox Code Playgroud)
我得到的回应是:
Sat Jan 25 15:44:18 IST 2014
Run Code Online (Sandbox Code Playgroud)
所以我尝试将默认TimeZone更改为UTC然后我检查,然后它工作正常
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
TimeZone tz = TimeZone.getDefault() ;
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Three = Calendar.getInstance();
System.out.println(cal_Three.getTime());
TimeZone.setDefault(tz);
Run Code Online (Sandbox Code Playgroud)
结果:
Sat Jan 25 16:09:11 IST 2014
Sat Jan 25 10:39:11 UTC 2014
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?
moc*_*ace 134
该System.out.println(cal_Two.getTime())调用返回Date的getTime().它是Date转换为字符串的println,并且转换将使用IST您的情况下的默认时区.
您需要明确用于在所需的时区DateFormat.setTimeZone()打印Date.
编辑:由@Laurynas提供,请考虑以下事项:
TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(timeZone);
SimpleDateFormat simpleDateFormat =
new SimpleDateFormat("EE MMM dd HH:mm:ss zzz yyyy", Locale.US);
simpleDateFormat.setTimeZone(timeZone);
System.out.println("Time zone: " + timeZone.getID());
System.out.println("default time zone: " + TimeZone.getDefault().getID());
System.out.println();
System.out.println("UTC: " + simpleDateFormat.format(calendar.getTime()));
System.out.println("Default: " + calendar.getTime());
Run Code Online (Sandbox Code Playgroud)
Pop*_*ibo 12
java.util.Date独立于时区.当您打印cal_Two虽然Calendar情况已经得到了它的时区设置为UTC,cal_Two.getTime()将返回一个Date不具有一个时区的实例(并且总是在默认时区)
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
System.out.println(cal_Two.getTimeZone());
Run Code Online (Sandbox Code Playgroud)
输出:
Sat Jan 25 16:40:28 IST 2014
sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
Run Code Online (Sandbox Code Playgroud)
来自javadoc TimeZone.setDefault()
设置getDefault方法返回的TimeZone.如果zone为null,则将默认值重置为VM首次启动时的值.
因此,移动您setDefault()之前cal_Two的实例化将获得正确的结果.
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
Calendar cal_Three = Calendar.getInstance();
System.out.println(cal_Three.getTime());
Run Code Online (Sandbox Code Playgroud)
输出:
Sat Jan 25 11:15:29 UTC 2014
Sat Jan 25 11:15:29 UTC 2014
Run Code Online (Sandbox Code Playgroud)
Calendar currentTime = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
currentTime.set(Calendar.ZONE_OFFSET, TimeZone.getTimeZone("UTC").getRawOffset());
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, currentTime.get(Calendar.HOUR_OF_DAY));
calendar.getTimeInMillis()
Run Code Online (Sandbox Code Playgroud)
为我工作
你肯定错过了一件小事,那就是你没有设置默认值:
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Run Code Online (Sandbox Code Playgroud)
所以代码看起来像:
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
Run Code Online (Sandbox Code Playgroud)
说明:如果要更改时区,请使用设置默认时区TimeZone.setDefault()
| 归档时间: |
|
| 查看次数: |
149655 次 |
| 最近记录: |