Vit*_*lie 4 java time java-time
我想显示一年中每个月的天数
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());
}
Run Code Online (Sandbox Code Playgroud)
为什么我会得到12 0?
你没有正确使用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
}
Run Code Online (Sandbox Code Playgroud)
现在,在您的问题中,您想要打印每个月的天数.您可以简单地拥有以下内容:
for (Month month : Month.values()) {
System.out.println(month.length(Year.now().isLeap()));
}
Run Code Online (Sandbox Code Playgroud)
在Java Time中,Month所有月份都有一个枚举,该方法length(leapYear)返回本月的长度,即该月的天数.由于这取决于当前年份是否是闰年,因此有一个布尔参数.
要检查当前年度,Year.now()如果是闰年,我们可以致电并返回isLeap().
作为旁注,如果您真的想要打印两个日期之间的天数,则需要使用ChronoUnit.DAYS.between(start, end).
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |