Java Date构造函数Date(长日期)有什么问题?

时间:2011-08-04 15:26:31

标签: java date calendar

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

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

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

在其他情况下它不会:

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:12)

这是由整数溢出引起的。整数的最大值为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

另见:

答案 1 :(得分:3)

数字太大而且你有溢出你应该在最后添加L使它变长。\ 8640000l(默认情况下java数字是int)