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 类的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 的 Period 和 Duration 类

Java 8 ??? Period and Duration examples

java.time.Period 到秒

period是啥意思

period是啥意思

java8及8之前日期相关类