#java #дата #calendar
При программировании на java столкнулся с проблемой, что календарь не всегда правильно возвращает день недели. Пробовал использовать как Calendar, так и GregorianCalendar, но результат одинаковый. Для примера: GregorianCalendar calendar1 = new GregorianCalendar(196, 0, 1); System.out.println(calendar1.get(GregorianCalendar.DAY_OF_WEEK)); Результатом в выводе будет 5, хотя по календарю: 01 января 196 - пятница, а значит мы должны были получить значение 6. Такая же проблема с годами: 1036 (1 января - воскресенье, а возвращает 5) 1316 (1 января - среда, а возвращает 5) 1456 (1 января - вторник, а возвращает 5) и др. Но иногда возвращает и правильные значения. Например: GregorianCalendar calendar2 = new GregorianCalendar(1600, 0, 1); System.out.println(calendar2.get(GregorianCalendar.DAY_OF_WEEK)); вернет 7, и по календарю это суббота.
Ответы
Ответ 1
Отвечу сам на собственный вопрос. Такая неразбериха с календарями получилась из-за отличий Григорианского и Юлианского календарей. В Юлианском календаре високосный год наступает каждый год, который кратный 4, а в Григорианском - високосными считаются года, которые делятся на 4, но не кратные 100 (за исключением годов, которые делятся на 400). Это означает, что постепенно разница между этими календарями увеличивается на 3 дня каждые 400 лет. Т.к. на Григорианский практически все страны перешли только с 1582 года, то до этого времени все ресурсы и языки программирования (помимо Java сравнивал еще с Python) по-своему высчитывают этот период. Что касается Java, то, как я понял, до 1582 года включительно в языке используется Юлианский календарь, а с 1583 - Григорианский.Ответ 2
Есть еще один нюанс про который забывает ТС: Calendar defines a locale-specific seven day week using two parameters: the first day of the week and the minimal days in first week (from 1 to 7). These numbers are taken from the locale resource data when a Calendar is constructed. They may also be specified explicitly through the methods for setting their values. Грубо говоря номер дня недели зависит от выбранной локали. В русском календаре первый день недели - понедельник, в западной традиции первый день недели воскресенье.
Комментариев нет:
Отправить комментарий