Что означает приведенный ниже код в java.util.Date?В чем разница между этими календарями? - PullRequest
0 голосов
/ 12 января 2012

В java.util.Date Я видел код ниже.

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

Что это значит?У меня есть эта проблема ClassCastException при сравнении дат?

Ответы [ 2 ]

5 голосов
/ 12 января 2012

Это означает, что в 1582 году папой Григорием была проведена календарная реформа.До этой даты - юлианский календарь, после - григорианский.

В юлианском календаре у нас был високосный год, если его число можно разделить на 4. В григорианском - если его число можно разделить на 4, минус эти годы, которыеможет быть разделен на 100 плюс эти, которые могут быть разделены на 400.

больше здесь

Более точный календарь может быть сделан, если это правило с сотнями будет повторяться стысяч, но это не было сделано, и в конечном итоге календарь соберет настолько большую ошибку по сравнению с реальным годовым циклом, что потребуется новая реформа.Но это проблема тысяч лет - через тысячу лет теряется 3/4 дня.

Очевидно, что именно поэтому они начали новый календарь с коррекции на один день меньше, чем следовало бы из-за разницы только между григорианским и юлианским календарями.В течение второй тысячи лет мы потеряем еще один день ... уже сейчас точка весеннего равноденствия чаще случается 20-21 марта, а не 21-22, как это было 400 лет назад.

0 голосов
/ 12 января 2012

Используемый в настоящее время календарь - это григорианский календарь.Он был введен в 1582 году для исправления проблем с длиной года в предыдущем (юлианском) календаре.

Поэтому неправильно использовать класс GregorialCalendar для дат до 1582 года, и Java будет неявно работать с классом JulianCalendar вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...