我试图显示一年中每个月的天数
LocalDate start = LocalDate.of(2016, 01, 01);
LocalDate end = start.plusYears(1);
Period everyMonth = Period.ofMonths(1);
for (;start.isBefore(end); start = start.plus(everyMonth)) {
System.out.println(Period.between(start, start.plus(everyMonth)).getDays());
}
为什么我得到 12 个 0?
最佳答案
您在这里没有正确使用 Period
类。 start
表示日期 01/01/2016
(采用 dd/MM/yyyy
格式)。当您添加 1 个月的时间段时,结果是日期 01/02/2016
。
Period
类定义的这两个日期之间的时间段是“1 个月”。如果您打印句点,您将有 "P1M"
,这是说的模式:
因此,返回期间内天数的 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)
方法返回这个月的长度,即当月的天数。由于这取决于当前年份是否为闰年,因此有一个 boolean 参数。要检查当前年份,我们可以调用
Year.now()
并使用 isLeap()
返回是否为闰年。附带说明一下,如果您真的想打印两个日期之间的天数,则需要使用
ChronoUnit.DAYS.between(start, end)
。关于java - 使用 Java Time 显示每个月的天数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35313662/