我有两个对象,p4 和 p5,它们有一个 Date 属性。在某些时候,构造函数工作正常:

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

将日期设置为 Sun Jul 31 11:01:39 EDT 2011

而在其他情况下,它不会:
p5.setClickDate(new Date(System.currentTimeMillis() - 86400000 * 70));

将日期设置为 Fri Jul 15 04:04:26 EDT 2011

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

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

谢谢!

最佳答案

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

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

您可以通过比较以下结果自己查看
System.out.println(86400000 * 70); // 1753032704
System.out.println(86400000L * 70); // 6048000000

也可以看看:
  • Java Tutorials - Language Basics - Primitive Data Types
  • 关于java - Java Date构造函数Date(长日期)怎么了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6944164/

    10-13 01:17