Мне нужно определить количество дней в месяце, представленное месячной частью java.time.ZonedDateTime
. Я придумал три способа, которые работают. Дано:
ZonedDateTime date = _some date_;
Опция 1:
int daysInMonth = date.getMonth().length(date.getChronology().isLeapYear(date.getYear()));
Опция 2:
int daysInMonth = date.getMonth().length(date.toLocalDate().isLeapYear());
Опция 3:
int daysInMonth = YearMonth.from(date).lengthOfMonth();
Я обнаружил опцию3 при проверке этого вопроса на наличие дубликатов ( Количество дней в конкретном месяце определенного года? ). Я пропускаю какие-либо другие варианты? Один из этих вариантов превосходит другой? При каких обстоятельствах проявится это превосходство?
Если я правильно читаю, первый, кажется, единственный, способный поддерживать хронологию, отличную от IsoChronology. Это не важно для рассматриваемого варианта использования, но мне нравится писать гибкий, многократно используемый код, и я бы хотел, чтобы это не упало в других ситуациях. Я не эксперт по этим альтернативным хронологиям, и я не знаю, имеют ли они високосные годы * или что-нибудь еще, что может привести к изменению продолжительности месяца. Черт, я даже не знаю, есть ли у них месяцев .
РЕДАКТИРОВАТЬ: Вариант 4, для ответа @Ole VV, ниже:
int daysInMonth = date.toLocalDate().lengthOfMonth();