1

计算的结束日期早于开始日期

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

为什么输出不正确?

4

3 回答 3

10

您的整数运算已溢出。an 的最大可能值int2147483647Integer.MAX_VALUE(略超过 20 亿),但乘以整数文字将产生 3628800000(约 36 亿)。结果是负数 ( -666167296) 和更早的日期。

尝试将您的文字之一转换为long强制long算术(或使用long文字):

( (long) 24 * 3600000 * 42)

或者

(24L * 3600000 * 42)

此操作完全在值范围内long(最大值9223372036854775807,超过 9 quintillion)。

于 2013-09-16T22:55:43.840 回答
0

您要添加的数字是 24 * 3600000 * 42,等于 3,628,800,000。这大于 2,147,483,647,这是可以用给定数据类型表示的最大值。您遇到的是溢出,这意味着在超过最大值后,数字会循环回其最小值,即负数。因此,您在日期中添加了一个负值

于 2013-09-16T22:58:14.310 回答
0

24 * 3600000 * 423,628,800,000不适合的int。发生翻转。通过强制转换因素之一来强制使用 long :

24L * 3600000 * 42
于 2013-09-16T22:55:52.937 回答