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());
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。