Java8:Period 、Duration和Instant 时间类

发布于 2021-11-23  698 次阅读


Period 和 Duration。两个类看表示时间量或两个日期之间的差,两者之间的差异为:Period基于日期值,而Duration基于时间值。

Instant表示高精度时间戳,它可以和ZonedDateTime以及long互相转换。

Instant(内容很多,看完收获颇多)

参考:https://juejin.cn/post/6844904186702725127

Period

        LocalDate startDate = LocalDate.of(2015, 2, 20);
        LocalDate endDate = LocalDate.of(2017, 1, 15);

        Period period = Period.between(startDate, endDate);
        System.out.println(period.toTotalMonths());
        System.out.println(period.getMonths());
        System.out.println(period.getYears());

结果:
22
10
1

任何一个时间单元为负数,则isNegative()方法返回true,因此可以用于判断endDate是否大于startDate,如果isNegative()返回false,那么startDate早于endDate。

创建Period类型对象是基于年、月、日和周,通过下面方法

Period fromUnits = Period.of(3, 10, 10);
Period fromDays = Period.ofDays(50);
Period fromMonths = Period.ofMonths(5);
Period fromYears = Period.ofYears(10);
Period fromWeeks = Period.ofWeeks(40);
 
assertEquals(280, fromWeeks.getDays());

parse()方法,参数PnYnMnD,“P”代表时间格式,Y代表年,M代表月,D代表日

Period fromCharYears = Period.parse("P2Y");
assertEquals(2, fromCharYears.getYears());

Duration

下面是我看都的公司项目代码,业务是判断间隔是否大于一分钟

Instant createInstant = verifyCodeQu.getCreateTime().toInstant();
  // CreateTime是Data类型
Instant nowInstant = Instant.now();
Duration between = Duration.between(createInstant, nowInstant);

我们能基于下面的方法获得Duration对象,ofDays(), ofHours(), ofMillis(), ofMinutes(), ofNanos(), ofSeconds():

Duration fromDays = Duration.ofDays(1)
assertEquals(86400, fromDays.getSeconds())
Duration fromMinutes = Duration.ofMinutes(60)

当然也可以通过文本序列创建Duration对象,格式为 “PnDTnHnMn.nS”

Duration fromChar1 = Duration.parse("P1DT1H10M10.5S");
Duration fromChar2 = Duration.parse("PT10M");

可以使用toDays(), toHours(), toMillis(), toMinutes()方法把Duration对象可以转成其他时间单元

assertEquals(1, fromMinutes.toHours());

也可以通过 plusX()、minusX()方法增加或减少Duration对象,其中X表示days, hours, millis, minutes, nanos 或 seconds

duration.plusSeconds(60).getSeconds()

也可以使用plus()和minus()方法带TemporalUnit 类型参数进行加减

duration.plus(60, ChronoUnit.SECONDS).getSeconds()

欢迎欢迎~热烈欢迎~