大纪元时间是自 1970 年 1 月 1 日以来经过的毫秒数,因此如果我想向该时间添加 x
天,添加相当于 x< 的毫秒似乎很自然
得到结果的天数
Date date = new Date();
System.out.println(date);
// Adding 30 days to current time
long longDate = date.getTime() + 30*24*60*60*1000;
System.out.println(new Date(longDate));
它给出以下输出
Mon Dec 26 06:07:19 GMT 2016
Tue Dec 06 13:04:32 GMT 2016
我知道我可以使用 Calendar
类来解决这个问题,但只是想了解这种行为
这是因为 JVM 将乘法 30*24*60*1000 的值视为 Int 并且乘法结果超出 Integer 的范围它会给出结果:-1702967296 intends of 2592000000 所以它给出的日期小于当前日期
尝试下面的代码:
public class Test {
public static void main(final String[] args) {
Date date = new Date();
System.out.println(date);
// Adding 30 days to current time
System.out.println(30 * 24 * 60 * 60 * 1000); // it will print -1702967296
long longDate = (date.getTime() + TimeUnit.DAYS.toMillis(30));
System.out.println(TimeUnit.DAYS.toMillis(30));
date = new Date(longDate);
System.out.println(date);
}
}