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;

这样就可以了

发布了75 篇原创文章 · 获赞 25 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/gghhm/article/details/103526353