计算的结束日期早于开始日期
Date startDate = new Date();
Date endDate = new Date(startDate.getTime() + (24 * 3_600_000 * 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
或 Integer.MAX_VALUE
(略高于 20 亿),但将整数文字相乘将产生 3628800000(约 36 亿)。结果是负数 (-666167296
),并且日期更早。
尝试将您的文字之一转换为
long
以强制 long
算术(或使用 long
文字):
( (long) 24 * 3600000 * 42)
或
(24L * 3600000 * 42)
此操作完全在
long
值范围内(最大值 9223372036854775807
,超过 9 quintillion)。
24 * 3600000 * 42
是 3,628,800,000
,不适合 int
。发生翻转。强制使用长投的因素之一:
24L * 3600000 * 42
您要添加的数字是 24 * 3600000 * 42,等于 3,628,800,000。这大于 2,147,483,647,这是给定数据类型可以表示的最大值。您遇到的是“溢出”,这意味着在超过最大值后,数字会循环回到最低值,即负值。因此,您要向日期添加一个负值。