Java 日期类有趣

问题描述 投票:0回答:3

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

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

为什么输出不正确?

java date
3个回答
11
投票

你的整数运算已经溢出。

int
的最大可能值为
2147483647
Integer.MAX_VALUE
(略高于 20 亿),但将整数文字相乘将产生 3628800000(约 36 亿)。结果是负数 (
-666167296
),并且日期更早。

尝试将您的文字之一转换为

long
以强制
long
算术(或使用
long
文字):

( (long) 24 * 3600000 * 42)

(24L * 3600000 * 42)

此操作完全在

long
值范围内(最大值
9223372036854775807
,超过 9 quintillion)。


0
投票

24 * 3600000 * 42
3,628,800,000
,不适合
int
。发生翻转。强制使用长投的因素之一:

24L * 3600000 * 42

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.