Java Duration类和Period类

Duration 

在JDK8中,可以使用java.time.Duration来计算时间时间差异,通过秒和纳秒相结合来描述一个时间量,最高精度是纳秒。

Duration类通过秒和纳秒相结合来描述一个时间量,最高精度是纳秒。时间量可以为正也可以为负,比如1天(86400秒0纳秒)、-1天(-86400秒0纳秒)、1年(31556952秒0纳秒)、1毫秒(0秒1000000纳秒)等。

创建方法

通过时间单位创建:

ofDays(), ofHours(), ofMillis(), ofMinutes(), ofNanos(), ofSeconds()

eg.

Duration fromDays = Duration.ofDays(1);

通过LocalDateTime或LocalTime

LocalDateTime start = LocalDateTime.of(2022, 1, 1, 8, 0, 0);

LocalDateTime end = LocalDateTime.of(2022, 1, 2, 8, 30, 30);

Duration duration = Duration.between(start, end);

解析方法

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

Duration fromChar2 = Duration.parse("PT10M");

格式说明:

P:开始标记

1Y:一年

2M:两个月

10D:十天

T:日期和时间的分割标记

2H:两个小时

30M:三十分钟

15S:15.02秒

1."P", "D", "H", "M" 和 "S"可以是大写或者小写(建议大写)

2.可以用“-”表示负数

比较方法

Instant start = Instant.parse("2017-10-03T10:15:30.00Z");

Instant end = Instant.parse("2017-10-03T10:16:30.00Z");

  

// start - end        

Duration duration = Duration.between(start, end);

  

// 任何一个时间单元为负数,则返回true。true:end早于start

duration.isNegative();

  

Duration.between(start, end).getSeconds();

Duration.between(start, end).getNano();

增减方法

plusX()、minusX()

X表示days, hours, millis, minutes, nanos 或 seconds

Duration duration = Duration.ofHours(2);

Duration newDuration = duration.plus(33, ChronoUnit.SECONDS);

转换单位

可以用getX来获得指定位置的值,因为Duration是由秒和纳秒组成,所以只能获得秒和纳秒:

Duration duration = Duration.ofHours(2);

  

duration.getSeconds();  //7200

duration.getNano();     //

Period

Period类通过年、月、日相结合来描述一个时间量,最高精度是天。时间量可以为正也可以为负,例如2年(2年0个月0天)、3个月(0年3个月0天)、4天(0年0月4天)等。

创建方法

通过时间单位创建:

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);  //280天

通过LocalDate创建:

LocalDate startDate = LocalDate.of(2015, 2, 20);

LocalDate endDate = LocalDate.of(2017, 1, 15);

// startDate减endDate

Period period = Period.between(startDate, endDate);

解析方法

格式1:“PnYnMnWnD”

Period period = Period.parse("P2Y");       //2年

Period period = Period.parse("P2Y3M5D");   //2年3月5天

Period period = Period.parse("P1Y2M3W4D"); // 1年2月3周4天。即:1年2月25天

说明:

P:开始符,表示period(即:表示年月日);

Y:year;

M:month;

W:week;

D:day

P, Y, M, W, D都可以用大写或者小写。

获得年月日

period.getYears();

period.getMonths();

period.getDays();

比较方法

LocalDate startDate = LocalDate.of(2015, 2, 20);

LocalDate endDate = LocalDate.of(2017, 1, 15);

// startDate减endDate

Period period = Period.between(startDate, endDate);

// 任何一个时间单元为负数,则返回true。true:endDate早于startDate

period.isNegative()

增减方法

Period period = Period.parse("P2Y3M5D");

period.plusDays(50);

period.minusMonths(2);

转换单位

Period period = Period.parse("P1Y2M3D");

period.toTotalMonths(); // 14

取值方法

Period period = Period.parse("P1Y2M3D");

period.getYears();  // 1

period.getMonths(); // 2

period.getDays();   // 3

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值