以下代码在java.util.Date中的含义是什么?这些日历有什么区别?

时间:2012-01-12 12:11:25

标签: java algorithm date time calendar

java.util.Date中,我看到了以下代码。

private static final BaseCalendar getCalendarSystem(int year) {
    if (year >= 1582) {
        return gcal;
    }
    return getJulianCalendar();
    }

这是什么意思?我有这个问题ClassCastException when comparing Dates?

2 个答案:

答案 0 :(得分:5)

这意味着在1582年由教皇格雷戈里进行了日历改革。在此日期之前 - 朱利安日历,之后 - 格里高利。

在Julian日历中,如果它的数字可以除以4,我们就有一个闰年。 在格里高利 - 如果它的数字可以除以4,减去这些年份可以除以100加上可以除以400的数字。

更多here

如果这个规则有数百个会重复数千个,那么可以制作更精确的日历,但是没有完成,并且最终日历将收集对实际年度周期的如此大的错误,需要进行新的改革。但这是数千年的问题 - 在一千年里,每天损失3/4。

显然,这就是他们开始新日历的原因,因为只有格里高利和朱利安日历之间的差异,因此应该少修正一天。在第二个千年期间,我们将失去更多的一天......现在,春分点在3月20-21更频繁地发生,而不是在400年前的21-22。

答案 1 :(得分:0)

当前使用的日历是公历。它是在1582年引入的,用于修复上一个(朱利安)日历中年份长度的问题。

因此,将GregorialCalendar类用于1582之前的日期是错误的,而Java将隐式使用类JulianCalendar