java 8中Period和Duration类简介说明

转自:

java 8中Period和Duration类简介说明

下文笔者讲述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());
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值