0

我有一个我无法理解的问题 - 如果我添加超过 24 天,则过去的转移日期。

long start = System.currentTimeMillis();
long shift = 3600000 * 24 * 24;
System.out.println(new Date(start));
System.out.println(new Date(start + shift));

对于 24 天轮班:

start - Wed Apr 18 11:37:12 CEST 2012
end - Sat May 12 11:37:12 CEST 2012

25天班:

start - Wed Apr 18 11:37:55 CEST 2012
end - Sat Mar 24 17:35:08 CET 2012

有人可以告诉我为什么它会这样吗?谢谢你。

4

3 回答 3

4

您正在执行整数乘法,然后将结果转换为长整数。乘法溢出,所以结果为负。

使用以下代码进行长乘法:

long shift = 3600000L * 24 * 24;
于 2012-04-18T09:48:35.870 回答
0

我真的建议不要以这种方式解决您的问题;改用 java.util.Calendar。它更有可能应对诸如夏令时更改之类的极端情况,而且 API 更好。

Calendar cal = Calendar.getInstance();
cal.setTime(new Date(start));
cal.add(Calendar.DAY_OF_MONTH, 24)
Date shifted = cal.getTime();
于 2012-04-18T09:54:59.817 回答
0

也许你应该只使用 java.util.Calendar 如下:

Calendar c = GregorianCalendar.getInstance(); //time default to now
c.add(Calendar.DATE, 24); //adds 24 days
Date end = c.getTime();
于 2012-04-18T09:55:58.713 回答