if(tuple.get("date")!=null&&((Date)tuple.get("date")).toInstant().atZone(ZoneId.systemDefault()).toLocalDate().equals(date)){
?报错。方法抛出 'java.lang.UnsupportedOperationException' 异常。
因为如果查询出来的tuple
对象中的date
属性是java.sql.Date
类型,则执行(Date)tuple.get("date")
进行类型转换时会抛出ClassCastException
异常,因为java.sql.Date
不能直接转换为java.util.Date
类型。
如果需要将java.sql.Date
类型转换为java.time.LocalDate
类型,可以使用以下代码:
if (tuple.get("date") != null) {
LocalDate localDate = ((java.sql.Date) tuple.get("date")).toLocalDate();
if (localDate.equals(date)) {
// 执行操作
}
}
因为
Java中。比较两个对象是否相等有两种方法:equals()
方法和==
运算符。
equals()
方法用于比较对象的内容是否相等,是由对象自身实现的。在java.time.LocalDate
类中,equals()
方法已经被重写,用于比较两个LocalDate
对象的日期是否相等。
而==
运算符用于比较操作符两边的对象引用是否指向同一个对象。对于基本类型(如int
、double
等),==
运算符比较的是值本身。对于对象类型,==
运算符比较的是引用地址。换句话说,它检查两个对象是否是同一个对象。
对于LocalDate
对象的比较,使用equals()
方法是判断两个日期是否相等的正确方法。因为LocalDate
是一个对象类型,它比较的是两个对象的内容(即日期值)是否相等,而不是两个引用是否指向同一个对象。所以,使用equals()
方法可以确保比较的是日期值而不是引用地址
localdate转date
LocalDate localDate = LocalDate.of(2023, 12, 15);
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
date转localdate
Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();