TL; DR: LocalDate
робить те, що зафіксовано, виконуючи міжнародний стандарт (ISO 8601). "Правильно" це чи ні - це вже зовсім інше питання.
Сам LocalDate
Javadoc включає це застереження:
Це еквівалентно пролептичній григоріанській системі календаря, в якій сучасні правила високосного року застосовуються на всі часи. Для більшості програм, написаних сьогодні, правила ISO-8601 цілком підходять. Однак будь-яка програма, яка використовує історичні дати та вимагає їх точності, визнає підхід ISO-8601 непридатним.
У Вікіпедії є більше інформації про пролептичний григоріанський календар . Серед іншого, там сказано:
Математично зручніше включати рік 0 і представляти попередні роки як від’ємні, з конкретною метою полегшення обчислення кількості років між від’ємним (BC) та позитивним (AD) роком. Це домовленість, яка використовується в астрономічній нумерації року та в міжнародній стандартній системі дат, ISO 8601. У цих системах 0 рік є високосним.
Пробачте мене, поки я заглиблююся в якийсь історичний контекст усього цього.
Роки в західному календарі нібито відлічуються від народження Ісуса Христа, але ідея цього почалася в шостому столітті, а наш сучасний календар базується на розрахунках, зроблених у шістнадцятому столітті. Оскільки римські цифри не представляли ні нуля, ні негативних чисел, роки зараховували або "після Ісуса" (н.е., для anno domini ), або "до Ісуса" (до н. Е., "До Христа"). Таким чином, традиційно за 1 р. До н. Е. Слідував 1 р. Н.е.
Однак у першому столітті ніхто так не рахував роки; для порівняння, Євангеліє від Луки описує рік, коли Ісус розпочав своє служіння, як
на п'ятнадцятому році правління Тиберія Цезаря, Понтій Пілат - намісник Іудеї, а Ірод - тетрарх Галілеї, а його брат Філіп - тетрарх Ітуреї та району Трахоніт, а Лісаній - тетрарх Ебіліні,
Нібито це було б 30 р. Н. Е., Оскільки Лука описує Ісуса на той час «близько тридцяти років». Але сучасні історики загалом сходяться на думці, що Діонісій Екзигус, який запропонував систему anno domini в 525 р. Н. Е., Помилився, і, отже, нумерація років зменшується принаймні на один-два роки. (Точна дата все ще дещо суперечлива; див. Вікіпедію, якщо вам потрібні докладніші відомості.)
Але пізно це виправляти зараз; навіть перехід від юліанського до григоріанського календаря, що суперечило менше двох тижнів, зустрів великий політичний спротив, оскільки перехід відбувся по всій Європі протягом декількох століть - ви можете собі уявити, наскільки руйнівною є зміна року було б зараз!
То яке відношення має ця історія до програмного забезпечення сьогодні? На жаль, через незліченну кількість способів обчислення та запису дат протягом історії, вам або потрібно відмовитись від календаря, що поводиться послідовно, коли ви рухаєтеся вперед і назад у часі, або вам потрібно відмовитись від обчислених дат маючи будь-яку відповідність датам, якими тоді користувались би реальні люди. Розбіжності відбуваються швидше, ніж ви можете подумати: багато європейських країн все ще користувались юліанським календарем менше 100 років тому, з відхиленням майже у два тижні від усіх інших в Європі!
Зрозуміло, що LocalDate
миє руки від цього безладу і впроваджує календар лише так, як ми використовуємо його сьогодні. Повторюючи те, що сказано в Javadoc: "Для більшості програм, написаних сьогодні, правила ISO-8601 цілком підходять. Однак будь-яка програма, яка використовує історичні дати і вимагає від них точності, визнає підхід ISO-8601 непридатним".