Duration

Duration表示两个时刻之间的时间间隔。另一个类似的Period表示两个日期之间的天数:

LocalDateTime start = LocalDateTime.of(2019, 11, 19, 8, 15, 0);
LocalDateTime end = LocalDateTime.of(2020, 1, 9, 19, 25, 30);
Duration duration = Duration.between(start, end);
System.out.println(duration); // PT1235H10M30S

long chronoHours = start.until(end, ChronoUnit.HOURS);
Period period = LocalDate.of(2019, 11, 19).until(LocalDate.of(2020, 1, 9));
System.out.println(chronoHours); // 1235
System.out.println(period); // P1M21D

long days = duration.toDays();
long hours = duration.toHoursPart();
long minutes = duration.toMinutesPart();
long seconds = duration.toSecondsPart();
System.out.println("时间间隔: " + days + "天" + hours + "小时" + minutes + "分钟" + seconds + "秒");
// 时间间隔: 51天11小时10分钟30秒

注意到两个LocalDateTime之间的差值使用Duration表示,类似PT1235H10M30S,表示1235小时10分钟30秒。而两个LocalDate之间的差值用Period表示,类似P1M21D,表示1个月21天。

DurationPeriod的表示方法也符合ISO 8601的格式,它以P...T...的形式表示,P...T之间表示日期间隔,T后面表示时间间隔。如果是PT...的格式表示仅有时间间隔。利用ofXxx()或者parse()方法也可以直接创建Duration

Duration d1 = Duration.ofHours(10); // 10 hours
Duration d2 = Duration.parse("P1DT2H3M"); // 1 day, 2 hours, 3 minutes

最后更新于

这有帮助吗?