您好,匿名用户
随意问技术百科期待您的加入

Calendar设置时区的问题

0 投票

代码放GAE上,默认时间为美国时区,google到蛮多说下面方法可以解决

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
Date date = cal.getTime();

date还是为美国时间,不起作用?

后来

TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();

这样就OK了。。。汗

用户头像 提问 2014年 3月7日 @ Annie 上等兵 (299 威望)
分享到:

1个回答

0 投票
 
最佳答案

时间和日历是两个不同的概念。

Date代表的是一个绝对时间,也就是说,不管你在哪个时区,Date都是一样的,都是从1970年1月1日0点0分GMT时间起,到目前这一刻的毫秒数。所以,你第一段代码和第二段代码里面,得到的date对象所代表的时间其实是一样的。

而日历是人们对绝对时间的一种描述方法,例如某年某月某日几时几分几秒,这,随着你当前所处的时区和地区而不同。

你在观察date对象的时候,你肯定没有去看它的毫秒数,而是先把毫秒数转换成一个日历。你没有写出你是怎么把date转换成日历的,但假如你是用默认的Date.toString()的话,那么,这是根据当前的默认时区来把毫秒数转换成日历的。因此,你在第一段代码里没有修改默认时区,得到的还是美国时间。而在第二段代码里,因为修改了默认时区,所以虽然绝对时间没有变化,但是你转换得到的日历不一样了。

其实,如果你是要获取当前时间,那么直接用new Date()就可以了,跟你先创建一个Calendar对象,再指定一个时区后获取的date是完全一样的。只有在你需要把一个date用日历来表示的时候,才需要用到Calendar和TimeZone。

用户头像 回复 2014年 3月7日 @ Aquarius 上等兵 (283 威望)
选中 2013年 9月7日 @Annie
提一个问题:

相关问题

+1 投票
1 回复 71 阅读
用户头像 提问 2012年 12月31日 @ Saber 中士 (1,234 威望)
0 投票
1 回复 27 阅读
+1 投票
1 回复 106 阅读
用户头像 提问 2012年 12月1日 @ Ezreal 上等兵 (266 威望)
0 投票
1 回复 32 阅读
用户头像 提问 2012年 12月1日 @ Sagittarius 上等兵 (289 威望)
0 投票
1 回复 39 阅读
用户头像 提问 2012年 12月1日 @ Twisted Fate 上等兵 (184 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...