计算的结束日期早于开始日期
Date startDate = new Date();
Date endDate = new Date(startDate.getTime() + (24 * 3600000 * 42));
System.out.println(startDate);
System.out.println(endDate);
输出:
Tue Sep 17 01:46:31 EEST 2013
Mon Sep 09 08:43:43 EEST 2013
为什么输出不正确?
最佳答案
您的整数运算已溢出。 int
的最大可能值为 2147483647
or Integer.MAX_VALUE
(略多于 20 亿),但将整数文字相乘将产生 3628800000(约 36 亿)。结果是一个负数 (-666167296
) 和一个更早的日期。
尝试将您的文字之一转换为 long
以强制执行 long
算术(或使用 long
文字):
( (long) 24 * 3600000 * 42)
或
(24L * 3600000 * 42)
此操作完全在 long
值范围内(最大值 9223372036854775807
,超过 9 quintillion)。
关于有趣的Java日期类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18838628/