【錯誤集錦】 時間格式在代碼中轉換錯誤的問題


在通過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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM