我需要从java.util.Date对象中减去几个月的时间来获取不同的java.util.Date。我知道在java 8中有一种简单的方法可以做到这一点,但是这必须在我学校的不支持java 8的服务器上运行。我当前的解决方案如下所示:
int numDaysToSubtract = 60;
Date curDate = new Date();
//subtract numdays * hours/day * mins/hour * secs/min * millisecs/sec
Date newDate = new Date(curDate.getTime() - (numDaysToSubtract * 24 * 3600 * 1000));
curDate是4/12/2018,计算的新日期是4/2/2018,显然不是2014年4月12日之前的60天。
为什么这不按预期工作?
我该怎么办呢?
答案 0 :(得分:3)
你已经溢出了要减去的毫秒数,因为该产品不适合32位整数,其最大值约为21亿(10位)。
60天的毫秒数是5,184,000,000,超过极限。由于溢出,产品计算为889,032,704毫秒,或大约10.2天。
将numDaysToSubtract
强制转换为long
,或者将其声明为long
,以强制进行long
计算,避免溢出。对我来说,这样做的结果是在2018年2月11日,60天前。