org.apache.commons.lang.time.DateUtils中年份金额的限制

时间:2017-03-23 13:59:47

标签: java

为什么if (val.get(Calendar.YEAR) > 280000000) { throw new ArithmeticException("Calendar value too large for accurate calculations"); } 在源代码中有多年的限制?

$ RED=$(printf '\033[01;31m')
$ GREEN=$(printf '\033[01;32m')
$ printf 'foo\nbar\n' | sed "/foo/{s/^/$RED/; s/\$/$GREEN/}"

我想知道,为什么只有2.8亿,而不是为了285.我已经猜到了,我们已经不再拥有java了。我也知道,Long可以在几毫秒内保持292278994年。

2 个答案:

答案 0 :(得分:3)

好吧,我不得不猜测,但这可能与:When will the java date collapse?

有关

由于280,000,000非常接近最大值292,278,994,因此可能出现任何预期的准确性问题,因此消息说明

  

日历值太大,无法进行准确的计算。

不过,我们现在知道宇宙什么时候结束:Sun Aug 17 07:12:55 GMT 292278994 - ;)

答案 1 :(得分:2)

正如托马斯所指出的那样,由于日期存储在64位中而存在问题。这名警卫是introduced in 2004。有关详细信息,请参阅测试用例,另请参阅错误LANG-24