对于以下
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.time
包中是否有一种方法可以给出Period
中的天数?我找不到一个。不确定我是否忽略了任何东西,或者它是否只是不存在。
来自文档:
使用基于日期的值(年、月、 天),使用
类。Period
类提供了各种get 方法,例如Period
、getMonths
和getDays
。要表示以单个时间单位(例如天)测量的时间量,您可以使用getYears
方法。ChronoUnit.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)
没有办法按照你的要求去做。原因是无法从
Period
推断出该期间的实际日历天数。 Period
与特定日期无关,一旦按照您显示的方式构建,它就会失去实际日历日期的跟踪。
例如,您的第一个经期代表 1 个月零 1 天的期间。但期间并不关心是哪一个月。简直就是“一个月一天”的概念。
如果您需要两个日期之间的天数,您应该使用
ChronoUnit.DAYS.between
,正如 Saket Mittal 所写。
根据您想要处理的时间长短,有一个特定的对象。 此页面此处非常有用,解释了哪一个最适合您的场景。
当您只想测量单个时间单位(例如天或秒)的时间量时,ChronoUnit. Between 方法非常有用
LocalDate localDateStartDate = LocalDate.of(2016, 06, 10);
LocalDate localDateEndDate = LocalDate.of(2016,06,23);
long days = ChronoUnit.DAYS.between(localDateStartDate, localDateEndDate);
ChronoUnit 工作正常,但它需要 API 级别 26,如果您仍然像我一样以 API 级别 24 为目标,我发现这个替代方案效果很好:
val start = LocalDate.now()
val end = LocalDate.now().plusYears(1)
val totalDays = Duration.between(start.atStartOfDay(), end.atStartOfDay()).toDays()
atStartOfDay 会将 LocalDate 转换为 LocalDateTime,时间设置为 00:00,因此我们可以使用 Duration 计算来获取日期之间的总天数
您可以只使用 LocalDate
until
方法。例如:
LocalDate startDate = LocalDate.now().minusYears(1);
LocalDate endDate = LocalDate.now();
Long days = startDate.until(endDate, ChronoUnit.DAYS);
System.out.println(days);
这会产生以下输出:
365