【错误集锦】 时间格式在代码中转换错误的问题

在通过mybatis进行持久化时,通过map类型接收sql语句的执行结果

<select id="find" parameterType="java.util.Map" resultType="map">
        SELECT r.org_id ,
        org.org_name orgName,
        r.create_date
        FROM r_index_org_score r
        LEFT JOIN dd_dictionary_org org ON r.org_id = org.id
        LEFT JOIN dd_dictionary_index i on r.index_id = i.id
    </select>

在本地代码环境(windows; jdk 17,兼容jdk8语法环境)中检测到 create_date字段值格式是java.sql.Timestamp类型,在服务器环境(linux; jdk8)检测到该字段值是java.time.LocalDateTime。
因此在本地按照Timestamp类型进行转换的方式,在服务器中无法通过:
java.lang.IllegalArgumentException: Cannot format given Object as a Date

原因:
jdk17中将日期字段解释为Timestamp, jdk1.8将日期格式解释为 localdatetime;

解决方案:
目前没有找到在代码中处理的方式,故放弃在java代码中对日期字段进行解释,在sql阶段将日期格式转为字符串,即通过mysql函数完成日期格式转为字符串的过程,函数DATE_FORMAT(日期值,日期格式)

<select id="find" parameterType="java.util.Map" resultType="map">
        SELECT r.org_id ,
        org.org_name orgName,
        DATE_FORMAT(r.create_date, '%Y-%m-%d %H:%i:%s') as create_date 
        FROM r_index_org_score r
        LEFT JOIN dd_dictionary_org org ON r.org_id = org.id
        LEFT JOIN dd_dictionary_index i on r.index_id = i.id
    </select>

在解决过程中遇到的报错信息
java.time.LocalDateTime cannot be cast to java.sql.Timestamp
java.lang.IllegalArgumentException: Cannot format given Object as a Date

posted @ 2022-01-17 17:50  等茶的茶  阅读(925)  评论(0编辑  收藏  举报