时区问题

今天遇到了个问题,头一次遇到这样的问题:

程序的后台(java)通过webservice调用其它系统返回的数据中有两个日期类型(Date)的数据,如下:

 

2011-12-29T00:00:00.000+ 0800
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年实行过夏令时啊

2009年5月3日

这两天在给未名写把用户信息向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月份结束了。佩服一下做日期库的人,写代码的同时还要搜集全世界各种使用夏令时的情况。。。。

哎哎,被这个事情郁闷了好久。不过也幸好是用生日试验的,否则还发现不了这个问题了。。。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值