錯誤原因:
使用 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;
這樣就可以了