时区有关问题
今天遇到了个问题,头一次遇到这样的问题:
程序的后台(java)通过webservice调用其它系统返回的数据中有两个日期类型(Date)的数据,如下:
1988-06-20T00:00:00.000+0900
我将这两个日期传递给前台(flex),最终显示的日期出现了问题 2011-12-29T00:00:00.000+0800 正常显示,1988-06-20T00:00:00.000+0900 显示为:6月19日 23:00:00 , 为什么少了一个小时呢, 后台拿到的日期为什么会有两个时区的情况呢?
================================
如下部分转自:
转自:http://blog.loudly.me/page/3/
要记得中国从1986年到1991年实行过夏令时啊
这两天在给未名写把用户信息向AD同步的程序,其中生日的字段要把日期时间写成ISO标准的字符串表达,这里面要求必须有时区信息。
可是实际跑起来,发现成生的结果中时区竟然是+0900而不是+0800,可是把那段代码拷到一个单独的文件里执行就是+0800的。于是我以为肯定是环境的问题,于是把各种时区的变量设了一顿,format日期前也显式地强调时区是Asia/Shanghai,可是还是一样的结果。我甚至开始怀疑UTC是有夏令时的,可是不可能啊。。。
其实本来的代码和单独拷出来执行的代码差的不是环境变量,而是转换的值,前者用的是我的生日(86年6月),后者是随便输的一个日期。当我把前者的日期改成86年3月时,惊奇地发现时区变成+0800了!于是开始使用二分法,一天一天地试,最后锁定了,86年5月3号是+0800的,5月4号就是+0900了。可是就算是夏令时,起点怎么在5月呢。。。
最后还是在wiki上查到了中国施行夏令时的历史,发现由于86年是头一年施行,所以从5月4号开始的,后面的几年就都是从4月份开始到9月份结束了。佩服一下做日期库的人,写代码的同时还要搜集全世界各种使用夏令时的情况。。。。
哎哎,被这个事情郁闷了好久。不过也幸好是用生日试验的,否则还发现不了这个问题了。。。