看见一个java的bug[转帖]
Java Date 的小BUG问题2011-07-25 13:02:37| 分类: java | 标签: |字号大中小 订阅 .
首先声明 ,这个bug不是我发现的,是百度知道alexnich 发现的,他提问的帖子的地址是http://zhidao.baidu.com/question/297274433.html
alexnich 在帖子中提到一段代码 如下:
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);
======================
结果发现
ld3 = -1325491905
ld4 =-1325491552
两者相差了353秒,也就是相差了5分多钟
=========我敢肯定这是Date类的getTime()方法出了问题
于是我想到用这两个毫秒数分别构造两个Date 看看
long ld3 = -1325491905000L;
long ld4 = -1325491552000L ;
System.out.println("ld3= "+ld3);
System.out.println("ld4= "+ld4);
Date ld3D = new Date(ld3);
Date ld4D = new Date(ld4);
System.out.println(ld3D);
System.out.println(ld4D);
===========================
让我们看看结果吧,很是惊奇,两者明明相差5分钟的的数据,居然日期是一摸一样的。。。。。暴汗
ld3= -1325491905000
ld4= -1325491552000
Sat Dec 31 23:54:07 CST 1927
Sat Dec 31 23:54:08 CST 1927
摸不清头脑的我,鬼使神差觉得应该加上一个毫秒数试试,于是又看见了一个惊奇!
代码如下:
ld3 = -1325491905001L;
ld4 = -1325491552001L ;
System.out.println("ld3= "+ld3);
System.out.println("ld4= "+ld4);
ld3D = new Date(ld3);
ld4D = new Date(ld4);
System.out.println(ld3D);
System.out.println(ld4D);
==============================让我们再看看结果
ld3= -1325491905001
ld4= -1325491552001
Sat Dec 31 23:54:06 CST 1927
Sat Dec 31 23:59:59 CST 1927
--------------------------------------------------阿弥陀佛,看看发生了什么!!!!似乎这才是真的结果!
让我们庆祝发现一个bug的诞生吧,虽然不是我发现的,但是亲眼看到,也是件很荣幸的事情,嘎嘎。