Вы правильно не используя Period
класс здесь. start
представляет собой дату 01/01/2016
(в формате dd/MM/yyyy
). Когда вы добавляете период в 1 месяц, результатом будет дата 01/02/2016
.
Период между этими двумя датами, определяемый классом Period
, составляет «1 месяц». Если вы печатаете период, вы будете иметь "P1M"
, который является образцом сказать, что:
Свидание на основе количества времени в календарной системе ISO-8601, например, «2-х лет, 3 месяца и 4 дней.
Как таковой, getDays()
, которые возвращают количество дней в периоде, вернет 0. В результате, отличается от количества дней между двумя датами. Вы можете убедить себя в том, что при печати результата getMonths
, он будет возвращать 1:
public static void main(String[] args) {
LocalDate start = LocalDate.of(2016, 01, 01);
Period period = Period.between(start, start.plus(Period.ofMonths(1)));
System.out.println(period.getDays()); // prints 0
System.out.println(period.getMonths()); // prints 1
}
Теперь в вашем вопросе, вы хотите напечатать количество дней в каждом месяце. Вы можете просто следующее:
for (Month month : Month.values()) {
System.out.println(month.length(Year.now().isLeap()));
}
В Java Time, есть перечисление Month
для всех месяцев, и метод length(leapYear)
возвращает длину в этом месяце, то есть количество дней в месяце. Поскольку это зависит от того, является ли текущий год високосным годом или нет, для этого существует логический аргумент.
Для проверки на текущий год, мы можем позвонить Year.now()
и вернуться, если это високосный год или нет с isLeap()
.
В качестве побочного сведению, если вы действительно хотели напечатать число дней между двумя датами, вам нужно будет использовать ChronoUnit.DAYS.between(start, end)
.
Поскольку вы предполагаете, что период в 1 месяц имеет какое-либо значение с точки зрения дней без рамки отсчета? ;) – Neil