java 8中Period和Duration类简介说明

书欣 Java教程 发布时间:2022-08-14 19:27:40 阅读数:7421 1
下文笔者讲述Period和Duration类简介说明,如下所示

Period和Duration类简介

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

Period类

Period 类表示一段时间的年、月、日
 开使用between()方法
   获取两个日期之间的差作为Period 对象返回 
例:
LocalDate startDate = LocalDate.of(2022, 8, 20);
LocalDate endDate = LocalDate.of(2022,8, 25);
 
Period period = Period.between(startDate, endDate);
Period对象中货位日期单元
   使用getYears(),getMonhs(),getDays()方法:
 LOG.info("Years:" + period.getYears() + 
    " months:" + period.getMonths() + 
    " days:"+period.getDays());

period对象之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);
 
使用解析文本序列来创建Period,其格式为“PnYnMnD”:

Period fromCharYears = Period.parse("P2Y");
assertEquals(2, fromCharYears.getYears());
 
Period fromCharUnits = Period.parse("P2Y3M5D");
assertEquals(5, fromCharUnits.getDays());

period的值可以通过plusX()
   minusX()方法进行增加或减少
   其中X表示日期单元
assertEquals(56, period.plusDays(50).getDays());
assertEquals(9, period.minusMonths(2).getMonths());

Duration 类

Duration类表示秒或纳秒时间间隔
  适合处理较短的时间
   需要更高的精确性
    我们能使用between()方法比较两个瞬间的差:
Instant start = Instant.parse("2022-08-11T20:22:40.00Z");
Instant end = Instant.parse("2022-08-13T230:26:40.00Z");
         
Duration duration = Duration.between(start, end);
使用getSeconds() 或 getNanoseconds() 方法获取时间单元的值:
assertEquals(60, duration.getSeconds());

我们也可以通过LocalDateTime 类获取获取Duration对象:
LocalTime start = LocalTime.of(1, 20, 25, 1024);
LocalTime end = LocalTime.of(3, 22, 27, 1544);
 
Duration.between(start, end).getSeconds();

isNegative()方法能用于验证后面时间是否大于前面时间
assertFalse(duration.isNegative());

获得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:
assertEquals(120, duration.plusSeconds(60).getSeconds());     
assertEquals(30, duration.minusSeconds(30).getSeconds());
 
也可以使用plus()和minus()方法带TemporalUnit 类型参数进行加减
assertEquals(120, duration.plus(60, ChronoUnit.SECONDS).getSeconds());     
assertEquals(30, duration.minus(30, ChronoUnit.SECONDS).getSeconds());
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaCourse/202208/4222.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者