我有一个我无法理解的问题 - 如果我添加超过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
有人可以告诉我为什么它会这样吗?谢谢。
答案 0 :(得分:4)
你正在进行整数乘法,然后将结果转换为long。乘法溢出,因此结果为负。
使用以下代码进行长乘法运算:
long shift = 3600000L * 24 * 24;
答案 1 :(得分: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();
答案 2 :(得分:0)
也许你应该只使用java.util.Calendar,如下所示:
Calendar c = GregorianCalendar.getInstance(); //time default to now
c.add(Calendar.DATE, 24); //adds 24 days
Date end = c.getTime();