Java日期比较的方法有三类
当你遇到两个日期字符串比较时你会想到用什么办法去解决呢?
1.字符串日期的比较
例如:两个字符串日期比较,最直接的是使用String的compareTo方法比较方法,可以比 数字的大小,日期的大小,两个字符串的按字母先后排序的大小,也可以对比两个字符串值是否相等结果就是0,大于0是 当前值在对比值的后面,小于0则相反。
//cru的日期比bre大
String cru = "2024-05-10 10:59";
String bre = "2024-05-10 10:50";
System.out.println(cru.compareTo(bre)>0);
2.Java8中的LocalDate做日期比较
不论类型是Date还是字符串都是可以转成LocalDate的,自从我用过Java8 我建议大家多用用,挺好的个人比较喜欢(要是字符串比较可以直接比没必要多做一步);
//字符串转LocalDate
DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE;
LocalDate date1 = LocalDate.parse("2023-04-15",formatter);
LocalDate date2 = LocalDate.parse("2023-04-10",formatter);
if (date1.isBefore(date2)) {
System.out.println(date1 + " is before " + date2);
} else if (date1.isAfter(date2)) {
System.out.println(date1 + " is after " + date2);
} else {
System.out.println(date1 + " is equal to " + date2);
}
//Date 转 LocalDate
// 创建一个java.util.Date对象
Date date = new Date();
// 转换为java.time.Instant
Instant instant = date.toInstant();
// 转换为java.time.ZoneDateTime
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, ZoneId.systemDefault());
// 转换为java.time.LocalDate
LocalDate localDate = zonedDateTime.toLocalDate();
// 输出转换后的LocalDate
System.out.println("LocalDate: " + localDate);
3.Java 中Date做日期比较
刚入职场的时候,确实是一直用Date 做日期比较,后面发现这个不好,字符串转的时候容易出现线程不安全问题。
//字符串转Date
Date cruDate = new Date();
Date breDate = DataDateUtil.getDate("20240510");
System.out.println(cruDate.compareTo(breDate));
System.out.println(cruDate.after(breDate));
//线程安全的转换方法如下
ThreadLocal<SimpleDateFormat> SDF = ThreadLocal.withInitial(()->new SimpleDateFormat("yyyyMMdd"));
String da = SDF.get().parse("20240510")