2023-12-15 工作心得 SQL里查出来的date时间格式详解

1 MySQL里查出来的date时间,在和LocalDate比较的时候,出了错。


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)) { 
        // 执行操作 
    }
 }

2 localdate的比较,用 equals 比较 而不是 == 。

因为

Java中。比较两个对象是否相等有两种方法:equals()方法和==运算符。

equals()方法用于比较对象的内容是否相等,是由对象自身实现的。在java.time.LocalDate类中,equals()方法已经被重写,用于比较两个LocalDate对象的日期是否相等。

==运算符用于比较操作符两边的对象引用是否指向同一个对象。对于基本类型(如intdouble等),==运算符比较的是值本身。对于对象类型,==运算符比较的是引用地址。换句话说,它检查两个对象是否是同一个对象。

对于LocalDate对象的比较,使用equals()方法是判断两个日期是否相等的正确方法。因为LocalDate是一个对象类型,它比较的是两个对象的内容(即日期值)是否相等,而不是两个引用是否指向同一个对象。所以,使用equals()方法可以确保比较的是日期值而不是引用地址

3 localdate和date不是一回事 谢谢!
互相转化:

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();

你可能感兴趣的:(sql,python,数据库)