gpt4 book ai didi

java - 使用 Java Time 显示每个月的天数

转载 作者:搜寻专家 更新时间:2023-11-01 01:41:23 26 4
gpt4 key购买 nike

我想显示一年中每个月的天数

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 定义类(class)是“1个月”。如果你打印句点,你会得到 "P1M" ,这是这样说的模式:

A date-based amount of time in the ISO-8601 calendar system, such as '2 years, 3 months and 4 days'.

因此,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com