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

bvu*_*laj 4 java calendar date

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

p4.setClickDate(new Date(System.currentTimeMillis() - 86400000 * 4));
Run Code Online (Sandbox Code Playgroud)

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

而在其他情况下它不会:

p5.setClickDate(new Date(System.currentTimeMillis() - 86400000 * 70));
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢!

Bal*_*usC 12

这是由整数溢出引起的.整数的最大值Integer.MAX_VALUE2147483647.您需要long通过后缀来明确指定数字L.

p5.setClickDate(new Date(System.currentTimeMillis() - 86400000L * 70));
Run Code Online (Sandbox Code Playgroud)

你可以通过比较结果来自己看

System.out.println(86400000 * 70); // 1753032704
System.out.println(86400000L * 70); // 6048000000
Run Code Online (Sandbox Code Playgroud)

也可以看看: