【问题标题】:What's wrong with the Java Date constructor Date(long date)?Java Date 构造函数 Date(long date) 有什么问题?
【发布时间】:2011-08-04 15:26:30
【问题描述】:

我有两个具有 Date 属性的对象 p4 和 p5。在某些情况下,构造函数可以正常工作:

p4.setClickDate(new Date(System.currentTimeMillis() - 86400000 * 4));

将日期设置为 2011 年 7 月 31 日星期日 11:01:39 EDT

而在其他情况下则不然:

p5.setClickDate(new Date(System.currentTimeMillis() - 86400000 * 70));

将日期设置为 2011 年 7 月 15 日星期五 04:04:26 EDT

根据我的计算,这应该将日期设置回 70 天,不是吗?

我可以使用日历解决这个问题,但我很好奇为什么 Date 会这样。

谢谢!

【问题讨论】:

  • Date无关,你有溢出,86400000 * 70 != 86400000L * 70

标签: java date calendar


【解决方案1】:

这是由整数溢出引起的。整数的最大值为Integer.MAX_VALUE,即2147483647。您需要通过在其后缀L 来明确指定数字为long

p5.setClickDate(new Date(System.currentTimeMillis() - 86400000L * 70));

你可以通过对比结果自己看

System.out.println(86400000 * 70); // 1753032704
System.out.println(86400000L * 70); // 6048000000

另见:

【讨论】:

    【解决方案2】:

    数字太大了,溢出了,应该在最后加L,让它变长。\8640000l(java数字默认是int)

    【讨论】:

      猜你喜欢
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 2011-08-06
      • 1970-01-01
      • 2014-07-31
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多