GAE中new Date()时区的问题

发现GAE中new Date()获得的时间与北京时间差了8小时


因为 Google App Engine面向全球用户,因此它使用标准时间。

然后,我试图去设置时区

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

但是,发现没有作用。

网上通常的解决方法是直接+8*60*60*1000,不过我觉得太2了

所以,继续查了下,发现了真相。

这里有个概念要弄清,Date是没有时区的概念的,无论什么时区的同一时间用Date来表示都是同一个(基于系统默认时区),Date说到底就是个long值;Calendar才有时区的概念。

比较一下以下输出就清楚了:
Java code
Calendar calendar1 = Calendar.getInstance(TimeZone.getTimeZone( " GMT+8 " )); Calendar calendar2 = Calendar.getInstance(TimeZone.getTimeZone( " GMT+7 " )); System.out.println(calendar1.get(Calendar.HOUR)); System.out.println(calendar2.get(Calendar.HOUR)); System.out.println(calendar1.getTime()); System.out.println(calendar2.getTime());

于是我觉得这样做是比较好的选择——数据库里就存标准时间,然后要输出的时候format一下
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
String snow = sdf.format(now);

最后,我要说,sina对代码的支持很差,考虑换csdn或javaeye

2010-08-14 10:01:39 于 sina blog

你可能感兴趣的:(Date,数据库,String,calendar,Blog,GAE)