我有两个对象,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为什么会这样做。
谢谢!
答案 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)