简介
本文介绍Java的Period和Duration的用法。
这两个类用来表示两个日期或时间量之间的差。都是JDK8新增的。
Period
简介
Period基于日期值 ,表示一段时间的年、月、日。
两个日期之间的差赋值给Period
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.getYears();
period.getMonths();
period.getDays();
基于年、月、日和周创建Period
如果仅一个值表示,如使用ofDays()方法,那么其他值为0。若仅用ofWeeks,则其天数为week数乘以7.
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天
基于文本序列创建Period
其格式为“PnYnMnD”:P:period(表示是年月日); Y:year;M:month;D:day
Period fromCharYears = Period.parse("P2Y");
System.out.println(fromCharYears.getYears()+ "(年)");
//2(年)
Period fromCharUnits = Period.parse("P2Y3M5D");
System.out.println(fromCharUnits.getYears() + "(年)" +
fromCharUnits.getMonths() + "(月)" + fromCharUnits.getDays() + "(日)");
//2(年)3(月)5(日)
增减日期
Period period = Period.parse("P2Y3M5D");
period.plusDays(50).getDays(); //55
period.minusMonths(2).getMonths(); //5
Duration
简介
Duration类表示秒或纳秒时间间隔,适合处理较短的时间。
比较两个时间的差
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();
通过LocalTime 类获取创建Duration
LocalTime start = LocalTime.of(1, 20, 25, 1024);
LocalTime end = LocalTime.of(3, 22, 27, 1544);
Duration.between(start, end).getSeconds();
Duration.between(start, end).getNano();
基于天、时、分、秒、纳秒创建Duration
ofDays(), ofHours(), ofMillis(), ofMinutes(), ofNanos(), ofSeconds()。例如:
Duration fromDays = Duration.ofDays(1);
基于文本序列创建Duration (格式为 “PnDTnHnMn.nS”)
Duration fromChar1 = Duration.parse("P1DT1H10M10.5S");
Duration fromChar2 = Duration.parse("PT10M");
把Duration对象可以转成其他时间单元
toDays(), toHours(), toMillis(), toMinutes()。例如:
Duration fromDays = Duration.ofDays(1);
fromDays .toHours()
增减Duration
plusX()、minusX()。X表示days, hours, millis, minutes, nanos 或 seconds
duration.plusSeconds(60).getSeconds()
plus()/minus()方法带TemporalUnit 类型参数进行加减:
duration.plus(60, ChronoUnit.SECONDS).getSeconds()