Java日期类有趣吗
计算的结束日期早于开始日期Java日期类有趣吗,java,date,Java,Date,计算的结束日期早于开始日期 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 为什么输出不正确 您的整数
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
的最大可能值是(略高于20亿),但将整数文本相乘将产生362880000(约36亿)。结果是一个负数(-666167296
),以及更早的日期
尝试将一个文本强制转换为long
以强制执行long
算术(或使用long
文本):
或
此操作在
long
值的范围内(最大值9223372036854775807
,超过9五百万)。您的整数算术溢出。一个int
的最大可能值是(略高于20亿),但将整数文本相乘将产生362880000(约36亿)。结果是一个负数(-666167296
),以及更早的日期
尝试将一个文本强制转换为long
以强制执行long
算术(或使用long
文本):
或
此操作在
long
值的范围内(最大值9223372036854775807
,超过9五百万)。24*3600000*42
是362880000
,它不适合int
。发生翻滚。通过铸造下列因素之一,强制使用长型钢:
24L * 3600000 * 42
24*3600000*42
是3628800000
,它不适合int
。发生翻滚。通过铸造下列因素之一,强制使用长型钢:
24L * 3600000 * 42
您试图添加的数字是24*3600000*42,等于362880000。这大于2147483647,这是可以用给定数据类型表示的最大值。您正在经历的是溢出,这意味着在超过最大值后,数字将返回到其最低值,即负值。因此,您正在向日期添加负值。您尝试添加的数字是24*3600000*42,等于362880000。这大于2147483647,这是可以用给定数据类型表示的最大值。您正在经历的是溢出,这意味着在超过最大值后,数字将返回到其最低值,即负值。因此,您正在向日期添加负值。
System.out.println(24*3600000*42)代码>谢谢奥利,它被算作负数,我让自己丢脸了:):)System.out.println(24*3600000*42)代码>谢谢,奥利,这是一个负数,我让自己丢脸了:)非常感谢我理解我的错误:)非常感谢我理解我的错误:)
24L * 3600000 * 42