有趣的Java日期类

标签 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

为什么输出不正确?

最佳答案

您的整数运算已溢出。 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/

相关文章:

java - 排序错误 : Hashmap<String, 列表 <String>>

java - 为什么 spring 不使用通用限定符注入(inject)?

MySQL 按日期排序 (M D, Y, H :M:S am\pm)

java.sql.日期格式化

java jdbc连接-结果集输出问题

java - INVOKE_CHAINCODE 失败 : transaction ID exists

java - 组织.apache.hadoop.mapreduce.counters.LimitExceededException : Too many counters: 121 max=120

javascript - Safari 中的日期显示为使用 Intl.DateTimeFormat 和 en-US 语言环境

php - 如何将 MySQL 数据库中的日期偏移 1 秒?

Java new Date() 当前时间错误