首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java Date 种的一个神级误差

2012-11-08 
Java Date 类的一个神级误差源自 Stack Overflow 的一个问题,原文点此外连接。问题很简单,跑如下代码:?publ

Java Date 类的一个神级误差

源自 Stack Overflow 的一个问题,原文点此外连接。

问题很简单,跑如下代码:

?

public static void main(String[] args) throws ParseException {    SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");      String str3 = "1927-12-31 23:54:07";      String str4 = "1927-12-31 23:54:08";      Date sDt3 = sf.parse(str3);      Date sDt4 = sf.parse(str4);      long ld3 = sDt3.getTime() /1000;      long ld4 = sDt4.getTime() /1000;     System.out.println(ld3);      System.out.println(ld4);      System.out.println(ld4-ld3);}

?预期 ld4 - ld3 的结果为 1。然后实际结果是:

?

-1325491905-1325491552353

即 Java 中 1927年12月31日 23时54分07秒 与?1927年12月31日 23时54分08秒存在 353 秒的误差。

?

导致问题的原因解答如下:

?


Just another episode in the often weird and wonderful world of time zones.

?写道

点此外查看1927年上海时区详情。简单的说在1927年最后一天的午夜,标准时间被回调了5分52秒。所以"1927-12-31 23:54:08"确切地说出现了两次。现在看来,Java 对这一时间的解析采用了“晚点”的本地时间实现,用以区分。

这只是又一个关于时区的神秘而神奇的案例。

?

代码的世界,无奇不有。有些东西,你不知道,你就真的不知道啊。呵呵

热点排行