怀疑java.util.Date这个类有问题!!

ciltr 2009-04-20 10:44:11
long t = 1949702400000l;//1949702400000l = 22566*24*3600000,也就是22566天的毫秒数!
System.out.println(t);
Date d= new Date(t);
System.out.println(d.toString());


输出结果是:
Tue Oct 14 08:00:00 CST 2031

可如果把1949702400000l添个负号改成它的相反数,输出结果是
Sat Mar 21 08:05:52 CST 1908


预料的输出结果应该是早上8点整啊!为什么会多出5分52秒呢?望高手解答!!
...全文
317 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ciltr 2009-05-04
  • 打赏
  • 举报
回复
我没这样说
yejinson 2009-04-30
  • 打赏
  • 举报
回复
路过
yooyoozoo 2009-04-30
  • 打赏
  • 举报
回复
和他开始计算的时间有关吗?
kimi 2009-04-30
  • 打赏
  • 举报
回复
你说每一年都是365天么?
ciltr 2009-04-20
  • 打赏
  • 举报
回复
这真的是个BUG吗?
ciltr 2009-04-20
  • 打赏
  • 举报
回复
你的JDK是哪个版本的?
我的是1.6.0_12.
  • 打赏
  • 举报
回复
这个 bug 已经被接受了,但是还没有修正
  • 打赏
  • 举报
回复
Java 的 Bug 数据库中有个类似的 bug,详见:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6653943
justinavril 2009-04-20
  • 打赏
  • 举报
回复
另外这是我的输出,没有见到你的那个5:52。我的时区是MST。
Fri Mar 20 17:00:00 MST 1908
ciltr 2009-04-20
  • 打赏
  • 举报
回复
相反数都不知道?
就是把1949702400000l改成-1949702400000l
加了个负号
ciltr 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 justinavril 的回复:]
API文档是这么说的:

Java code但对于 UTC,大约每一两年出现一次额外的一秒,称为“闰秒”。闰秒始终作为当天的最后一秒增加,并且始终在 12 月 31 日或 6 月 30 日增加。例如,1995 年的最后一分钟是 61 秒,因为增加了闰秒。大多数计算机时钟不是特别的准确,因此不能反映闰秒的差别。
[/Quote]

long day = -25568l;
long t = day*(24l*3600000l);
Date d= new Date(t);
System.out.println(d.toString());

输出正常:
Sun Dec 31 08:00:00 CST 1899

如果把day改成-25567l,输出为:
Mon Jan 01 08:05:52 CST 1900

仅一天之差,闰秒也不可能1天就多出5分52秒吧? 是不是这个类有问题?
ciltr 2009-04-20
  • 打赏
  • 举报
回复
long day = -25568l;
long t = day*(24l*3600000l);
Date d= new Date(t);
System.out.println(d.toString());

输出正常:
Sun Dec 31 08:00:00 CST 1899

如果把day改成-25567l,输出为:
Mon Jan 01 08:05:52 CST 1900

仅一天之差,闰秒也不可能1天就多出5分52秒吧? 是不是这个类有问题?
kingssman 2009-04-20
  • 打赏
  • 举报
回复
有意思,难道根符号位有关系??
justinavril 2009-04-20
  • 打赏
  • 举报
回复
API文档是这么说的:
但对于 UTC,大约每一两年出现一次额外的一秒,称为“闰秒”。闰秒始终作为当天的最后一秒增加,并且始终在 12 月 31 日或 6 月 30 日增加。例如,1995 年的最后一分钟是 61 秒,因为增加了闰秒。大多数计算机时钟不是特别的准确,因此不能反映闰秒的差别。 
macd2008 2009-04-20
  • 打赏
  • 举报
回复
"把1949702400000l添个负号改成它的相反数"
什么意思,不理解
yangkaixin1226 2009-04-20
  • 打赏
  • 举报
回复
好问题,收藏
ciltr 2009-04-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 sese1990 的回复:]
对于那个多出的时间,时间是经过原子钟对比修改了的,每年地球自转损失的秒数是要考虑的!

现在明白了吧,去看看物理的书!
[/Quote]
long day = -25568l;
long t = day*(24l*3600000l);
Date d= new Date(t);
System.out.println(d.toString());

输出正常:
Sun Dec 31 08:00:00 CST 1899

如果把day改成-25567l,输出为:
Mon Jan 01 08:05:52 CST 1900

这个我在上面给出来了的,看来你没有仔细看贴.

仅一天之差,地球自转损失也不可能在1天之内多出5分52秒吧? 你说是什么原因呢?
kimi 2009-04-20
  • 打赏
  • 举报
回复
对于那个多出的时间,时间是经过原子钟对比修改了的,每年地球自转损失的秒数是要考虑的!

现在明白了吧,去看看物理的书!
kimi 2009-04-20
  • 打赏
  • 举报
回复
Thu Jan 01 08:00:00 CST 1970 这个时候的date.getTime()==0 即标准起始时间 而不是0时0分0秒

这个事SUN规定的格林威治时间的起始点 所以你如果是用的此时间的负数来计数的话将会在此基础上往前倒退相应的时间

long time=-1949702400000l;
Date date=new Date();
date.setTime(time);
System.out.println(date);

//以下是往前推迟的年数 计算结果为61年 即往前推迟61年
long x=(1949702400000l)/1000/3600/24/365;
System.out.println(x);

显示结果当然为1970年往前61年,即1908年 你仔细算算就OK了

希望给点分
yangqidong 2009-04-20
  • 打赏
  • 举报
回复
推荐使用java.util.Calendar

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧