Java中Period计算两日期天数返回错误,预期31天却得1天,求原因
问题分析:Period计算日期差的误区
你的代码本身没有语法错误,但用错了工具类的用途:
Period.between()的设计目的是返回两个日期按「年-月-日」分段的间隔,而非总天数。比如从2023-09-01到2023-10-02,它会先计算月份差为1个月(9月到10月),再计算剩余的日期差为1天(2日-1日),所以输出0 years,1 months,1 days是符合它的逻辑的。
如果要获取两个日期之间的总天数差,应该使用ChronoUnit.DAYS.between()或者LocalDate.until()方法指定天数单位:
正确代码示例
LocalDate from = LocalDate.of(2023, 9, 1); LocalDate to = LocalDate.of(2023, 10, 2); // 方法1:使用ChronoUnit.DAYS long totalDays = ChronoUnit.DAYS.between(from, to); System.out.println(totalDays + " days"); // 方法2:使用LocalDate.until long totalDays2 = from.until(to, ChronoUnit.DAYS); System.out.println(totalDays2 + " days");
以上两种方法都会输出预期的31 days。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

