如何计算一个时期的天数?

2022-08-31 15:04:14

对于以下计算:Period

Period.between(LocalDate.of(2015, 8, 1), LocalDate.of(2015, 9, 2))

结果是:

P1M1D

这相当于 31 天 + 1 天 = 32 天。

为此:Period

Period.between(LocalDate.of(2015, 8, 1), LocalDate.of(2015, 10, 2))

结果是:

P2M1D

这相当于:31 天(8 月)+ 30 天(9 月)+ 1(10 月)= 62 天

包中是否有一种方法可以给出一个中的天数?我找不到一个。不知道我是否忽略了什么,或者它只是平淡无奇。java.timePeriod


答案 1

文档中

要使用基于日期的值(年、月、日)定义时间量,请使用该类。该类提供了各种 get 方法,例如 、 和 。若要显示以单个时间单位(如天)测量的时间量>,可以使用该方法。PeriodPeriodgetMonthsgetDaysgetYearsChronoUnit.between

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);

Period p = Period.between(birthday, today);
long p2 = ChronoUnit.DAYS.between(birthday, today);
System.out.println("You are " + p.getYears() + " years, " + p.getMonths() +
                   " months, and " + p.getDays() +
                   " days old. (" + p2 + " days total)");

该代码生成类似于以下内容的输出:

You are 53 years, 4 months, and 29 days old. (19508 days total)

答案 2

没有办法做你要求的事情。原因是无法从 a 推断出该期间的实际日历日数。A 不与特定日期绑定,一旦以显示方式构造,它将失去对实际日历日期的跟踪。PeriodPeriod

例如,您的第一个经期表示 1 个月零 1 天的月经期。但这个时期并不关心哪个月。它只是一个“一个月零一天”的概念。

如果您需要两个日期之间的天数,则应使用 Saket Mittal 所写的内容。ChronoUnit.DAYS.between


推荐