gpt4 book ai didi

datetime - Java 8 - ChronoUnit.MONTHS.between(fromDate,toDate) 未按预期工作

转载 作者:行者123 更新时间:2023-12-03 15:21:57 30 4
gpt4 key购买 nike

我需要找到没有。两个日期之间的月份数,包括两个月份。我正在使用 ChronoUnit.Months.between,但得到了意想不到的结果。

代码适用于:1 月 31 日 - 7 月 31 日

失败日期:1 月 31 日 - 6 月 30 日

失败的代码:

import java.time.LocalDate;
import static java.time.temporal.ChronoUnit.MONTHS;
public class HelloWorld{

public static void main(String []args){
LocalDate startDate=LocalDate.of(2018,01,31);
LocalDate endDate=LocalDate.of(2018,6,30);
//Both dates inclusive, hence adding 1
long noOfMonths = (MONTHS.between(startDate,endDate)) + 1L;
System.out.println(" ********* No. of months between the two dates : " + noOfMonths);
}
}

预计:6(一月、二月、三月、四月、五月、六月)
实际:5

有效的代码:
import java.time.LocalDate;
import static java.time.temporal.ChronoUnit.MONTHS;
public class HelloWorld{

public static void main(String []args){
LocalDate startDate=LocalDate.of(2018,01,31);
LocalDate endDate=LocalDate.of(2018,7,31);
//Both dates inclusive, hence adding 1
long noOfMonths = (MONTHS.between(startDate,endDate)) + 1L;
System.out.println(" ********* No. of months between the two dates : " + noOfMonths);
}
}

预计:7(一月、二月、三月、四月、五月、六月、七月)
实际:7

你看到同样的行为吗?有没有其他方法可以做到这一点?

谢谢

最佳答案

davidxxx 在 the other answer已经解释了为什么您的代码给出了意外的结果。请允许我补充一点,如果您对月份而不是日期感兴趣,可以使用 YearMonth class 是您可以使用的正确且正确的类:

        YearMonth startMonth = YearMonth.of(2018, Month.JANUARY);
YearMonth endMonth = YearMonth.of(2018, Month.JUNE);
// Both months inclusive, hence adding 1
long noOfMonths = ChronoUnit.MONTHS.between(startMonth, endMonth) + 1;
System.out.println(" ********* No. of months between the two months (inclusive): " + noOfMonths);

输出:

********* No. of months between the two months (inclusive): 6



这显然也消除了月份长度不等所带来的问题。

如果您已经收到 LocalDate对象,它可能值得转换:
        LocalDate startDate = LocalDate.of(2018, Month.JANUARY, 31);
YearMonth startMonth = YearMonth.from(startDate);

顺便说一句,不要使用两位数 01一个月。一月份它有效,但都没有 08也不是 09将在八月或九月工作,因此养成它是一个坏习惯。 Java(和许多其他语言)理解以 0 开头的数字如 octal numbers .

关于datetime - Java 8 - ChronoUnit.MONTHS.between(fromDate,toDate) 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50890562/

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