为什么此Calendar对象的YEAR设置为奇怪的值?

时间:2015-10-24 08:07:57

标签: java datetime calendar max

我正在撰写一个关于日历的应用。现在我正在努力熟悉Calendar类。

我写了一些代码来获取日期DAY_OF_WEEK的{​​{1}}。我以为它会抛出异常或其他东西。但事实并非如此!它输出星期四!这是代码:

1st Jan, Integer.MAX_VALUE

注意:方法Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, Integer.MAX_VALUE); c.set(Calendar.MONTH, Calendar.JANUARY); c.set(Calendar.DATE, 1); System.out.println (getReadableDayOfWeek(c.get(Calendar.DAY_OF_WEEK))); 只是按照它说的那样做。

然后,当我查看文档时,我发现有一个名为getReadableDayOfWeek的方法。所以真的 是最大的!所以我添加了一些getMaximum来查看实际最大值是什么:

println

输出结果为:

System.out.println ("Maximum Year: " + c.getMaximum(Calendar.YEAR));
System.out.println ("Maximum Integer: " + Integer.MAX_VALUE);

现在我知道最大值小于Maximum Year: 292278994 Maximum Integer: 2147483647 。我想知道真正的值是什么,我将Integer.MAX_VALUE设置为:

YEAR

我猜它会输出与System.out.println ("Actual Year in Calendar object: " + c.get (Calendar.YEAR)); System.out.println ("Maximum Year: " + c.getMaximum(Calendar.YEAR)); System.out.println ("Maximum Integer: " + Integer.MAX_VALUE); 相同的数字,但它没有!

输出:

c.getMaximum(Calendar.YEAR)

我非常困惑。为什么会有这个结果?你可以在292278994之后获得一周中的哪一天吗?

1 个答案:

答案 0 :(得分:0)

这是java中整数溢出情况的一个例子。溢出不会在java中引发异常。

见本文:http://javapapers.com/core-java/java-overflow-and-underflow/

因为Integer.MAX_VALUE大于c.getMaximum(Calendar.YEAR)),所以会溢出。