我在Java中计算当前日期减去一定天数的问题.
我有:
Date pastDate = new Date(new Date().getTime() - (1000 * 60 * 60 * 24 * 25));
Run Code Online (Sandbox Code Playgroud)
这是返回2016年2月16日星期二09:04:18它应该实际返回Tue Dec 28 16:06:11 2015年(过去25天).
非常奇怪的是,对于25天以下的任何数字,完全没问题:
Date pastDate = new Date(new Date().getTime() - (1000 * 60 * 60 * 24 * 24));
Run Code Online (Sandbox Code Playgroud)
在过去的24天内返回可预测的Tue Dec 29 16:06:11 2015年.
任何帮助,将不胜感激.
rge*_*man 10
随着24时间的推移,产品仍然低于最大可能int值Integer.MAX_VALUE,即2,147,483,647.该24天的产品是2073600000.该25天的产品是21.6.结果是溢出和负数,导致将来的日期.
对于此类值,请使用long文字作为第一个值(或将其转换为a long)以避免超出时出现的溢出Integer.MAX_VALUE.请注意L附加到1000L:
(1000L * 60 * 60 * 24 * 25)
Run Code Online (Sandbox Code Playgroud)
这工作正常,因为所需的构造函数Date取一个long.
使用Calendars可以更清晰地处理日期算术,您可以明确地add使用负数天.
此外,使用Java 8+,您可以使用Instant及其minus方法来减去时间.
Instant.now().minus(24, ChronoUnit.DAYS);
Run Code Online (Sandbox Code Playgroud)