Java 8 的 Period 和 Duration 类
Posted 可小辉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 8 的 Period 和 Duration 类相关的知识,希望对你有一定的参考价值。
Period 和 Duration。两个类看表示时间量或两个日期之间的差,两者之间的差异为:Period基于日期值,而Duration基于时间值。
1.Period 类
Period 类表示一段时间的年、月、日,开使用between()方法获取两个日期之间的差作为Period 对象返回:
LocalDate startTime = LocalDate.of(2021, 12, 15);
LocalDate endTime = LocalDate.of(2022, 1, 5);
Period period = Period.between(startTime, endTime);
System.out.println(period.getYears());
System.out.println(period.getMonths());
System.out.println(period.getDays());
System.out.println(period.isNegative());
0
0
21
false
如果isNegative()返回false,那么startDate早于endDate。
基于年、月、日和周创建Period类型对象
Period fromUnits = Period.of(3, 10, 10);
Period days = Period.ofDays(50);
Period years = Period.ofYears(10);
Period months = Period.ofMonths(5);
Period weeks = Period.ofWeeks(10);
System.out.println(fromUnits);
System.out.println(days);
System.out.println(years);
System.out.println(months);
System.out.println(weeks);
通过解析文本序列来创建Period,其格式为“PnYnMnD”:
int years = Period.parse("P3Y4M5D").getDays();
System.out.println(years);
period的值可以通过plusX()、minusX()方法进行增加或减少,其中X表示日期单元:
int days = Period.parse("P3Y4M5D").plusDays(9).getDays();
int days1 = Period.parse("P3Y4M5D").minusDays(6).getDays();
System.out.println(days1);
2.Duration 类
Duration类表示秒或纳秒时间间隔,适合处理较短的时间,需要更高的精确性。我们能使用between()方法比较两个瞬间的差:
Instant start = Instant.parse("2021-10-03T10:15:30.00Z");
Instant end = Instant.parse("2021-10-03T10:16:30.00Z");
Duration duration = Duration.between(start, end);
System.out.println(duration.getSeconds());
通过LocalDateTime 类获取获取Duration对象:
LocalTime start = LocalTime.of(1, 20, 25, 1024);
LocalTime end = LocalTime.of(3, 22, 27, 1544);
long seconds = Duration.between(start, end).getSeconds();
System.out.println(seconds);
LocalTime start = LocalTime.of(1, 20, 25, 1024);
LocalTime end = LocalTime.of(3, 22, 27, 1544);
Duration duration = Duration.between(start, end);
System.out.println(duration.isNegative());
基于下面的方法获得Duration对象,ofDays(), ofHours(), ofMillis(), ofMinutes(), ofNanos(), ofSeconds():
Duration minutes = Duration.ofMinutes(1);
System.out.println(minutes.getSeconds());
通过文本序列创建Duration对象,格式为 “PnDTnHnMn.nS”:
Duration parse = Duration.parse("P1DT1H10M10.5S");
System.out.println(parse.getSeconds());
通过 plusX()、minusX()方法增加或减少Duration对象,其中X表示days, hours, millis, minutes, nanos 或 seconds
Duration parse = Duration.parse("P1DT1H10M10.5S");
System.out.println(parse.plusSeconds(5).getSeconds());
以上是关于Java 8 的 Period 和 Duration 类的主要内容,如果未能解决你的问题,请参考以下文章