我有两个对象,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 - Java Date构造函数Date(长日期)怎么了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6944164/