使用Duration
类,这是Java提供专门用来计算时间差的类。使用between
静态方法传入要两个计算差值的时间对象。
代码:
// 比较LocalDateTime
LocalDateTime dateTime1 = LocalDateTime.of(2022, 11, 5, 11, 50, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2022, 11, 8, 15, 55, 1);
Duration between = Duration.between(dateTime1, dateTime2);
System.out.println(between.toDays()); // 3 相差3天
System.out.println(between.toHours()); // 76 相差76小时
System.out.println(between.toMinutes()); // 4565 相差4565分钟
System.out.println(between.getSeconds()); // 273901 相差273901秒
System.out.println(between.toMillis()); // 273901000 相差273901000毫秒
System.out.println(between.toNanos()); // 273901000000000 相差273901000000000纳秒
// 比较ZonedDateTime
ZonedDateTime now = ZonedDateTime.now();
ZonedDateTime zonedDateTime = ZonedDateTime.now().plusHours(4);
Duration between1 = Duration.between(now, zonedDateTime);
System.out.println(between1.toHours()); // 4
System.out.println(between1.toMinutes()); // 240
注:
- between传入两个时间,当第二个时间大于第一个时,差值为正数,反之为负数
- 时间对象必须具有秒值,如ZonedDateTime、LocalDateTime、LocalTime都可以。使用LocalDate等无秒值的比较时,会出现
java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Seconds
异常 - 两个时间对象可以为不同对象。例如可以一个为ZonedDateTime,一个为LocalDateTime