java setTimestamp 時間不對

錯誤原因:

使用 PreparedStatement 的 setTimestamp 往數據庫傳入時間的時候不對,由於我本地的數據是一個字符串的時間,所以要轉換成對應的Timestamp的對象
可是本地轉換後傳入數據庫裏的時間總是不對,比如我本地的時間是:

2019-05-06 16:50:51

可是傳入數據庫後的時間卻是

2019-05-06 08:50:51

打印了一下 PreparedStatement , 發現它實際傳入的時間是

'2019-05-07 16:50:51.000000 +08:00'

+08:00 對應的時區是 CST,
而傳入數據庫後的時區是UTC,即 +00:00,

所以只要在我本地字符串轉換成Timestamp格式的時候,設置一下對應的時區就可以了,比如我這邊是指定成 UTC 的時區就可以了,下面是我的代碼:

// String --> Date時間
    public static java.sql.Timestamp to_sqldate(String time_date){
        SimpleDateFormat sdf = null;
        final String GSTIME="yyyy-MM-dd HH:mm:ss";
        sdf = new SimpleDateFormat(GSTIME);
        
        sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // 就是這一步指定對應的時區
        Date date = null; //初始化date
        try {
            date = sdf.parse(time_date); //Mon Jan 14 00:00:00 CST 2013
        } catch (ParseException e) {
            e.printStackTrace();
        }
        java.sql.Timestamp sql_date = new java.sql.Timestamp(date.getTime());//進行日期的轉換

        return sql_date;

這樣就可以了

發佈了78 篇原創文章 · 獲贊 26 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章