错误原因:
使用 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;
这样就可以了