一、LocalDate比较日期大小
LocalDate 是不含时分秒的日期时间格式,它包含年月日等基本信息。我们可以使用 compareTo() 方法进行日期的比较大小。如果 this 比参数 date 小,则返回负数;如果 this 比参数 date 大,则返回正数;如果相等,则返回0。
LocalDate date1 = LocalDate.of(2022, 3, 20);
LocalDate date2 = LocalDate.of(2022, 3, 21);
int compareTo = date1.compareTo(date2);
System.out.println(compareTo); //-1
此时我们可以得出,date1 小于 date2,返回结果为 -1。
二、LocalDate和LocalDateTime
LocalDateTime 是包含时分秒的日期时间格式,它除了拥有 LocalDate 的基本信息之外,还包含有时分秒的信息。同样地,我们可以使用 compareTo() 方法进行日期时间的比较大小。
LocalDate localDate = LocalDate.of(2022, 3, 20);
LocalDateTime localDateTime = LocalDateTime.of(localDate, LocalTime.of(15, 30, 20));
LocalDateTime localDateTime2 = LocalDateTime.of(localDate, LocalTime.of(18, 30, 40));
int compareTo = localDateTime.compareTo(localDateTime2);
System.out.println(compareTo); //-1
此时我们可以得出,localDateTime 小于 localDateTime2,返回结果为 -1。
三、LocalDateTime计算时间差
LocalDateTime 支持各种加减运算,通过 plus(…) 和 minus(…) 可以对 LocalDateTime 进行时间计算。我们常用的还有 between(…) 方法,如下所示:
LocalDateTime localDateTime = LocalDateTime.of(2022, 3, 20, 19, 30, 0);
LocalDateTime localDateTime2 = LocalDateTime.of(2022, 3, 20, 22, 30, 0);
Duration between = Duration.between(localDateTime, localDateTime2);
System.out.println(between.getSeconds()); //10800
此时我们可以得出 localDateTime 与 localDateTime2 的时间差为 3 小时。
四、LocalDateTime怎么比较大小
与LocalDate和LocalTime不同,LocalDateTime 类型的比较,需要先调用 isBefore() 或 isAfter() 方法,再判断compareTo() 方法的返回值。如下所示:
LocalDateTime localDateTime = LocalDateTime.of(2022, 3, 20, 19, 30, 0);
LocalDateTime localDateTime2 = LocalDateTime.of(2022, 3, 20, 22, 30, 0);
boolean isBefore = localDateTime.isBefore(localDateTime2);
boolean isAfter = localDateTime.isAfter(localDateTime2);
int compareTo = localDateTime.compareTo(localDateTime2);
System.out.println(isBefore); //true
System.out.println(isAfter); //false
System.out.println(compareTo); //-1
通过此例我们可以得出,localDateTime 小于 localDateTime2,返回结果为 -1。
五、Date和LocalDateTime的区别
Date 是 Java 8 以前版本中用于表示日期时间的类型,不容易进行日期时间格式的操作,而 LocalDate、LocalDateTime 类型则是 Java 8 以后新增的类。Date 对象是可变且线程不安全的,而 LocalDateTime 类型是不可变且线程安全的。
下面我们通过代码展示 LocalDateTime 与 Date 类型的比较:
Date date1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2022-03-20 23:30:00");
LocalDateTime localDateTime = LocalDateTime.of(2022, 3, 20, 23, 30, 0);
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
Date date2 = Date.from(instant);
System.out.println(date1.compareTo(date2)); //0
通过此例我们可以看出,Date 对象与 LocalDateTime 类型经过转换后,可以进行日期时间的比较。