如何以“yyyy-MM-dd HH:mm:ss”形式在Mysql中保存时间,并且在读取后仍以该形式显示

1、如何在Mysql数据库中以“yyyy-MM-dd HH:mm:ss”形式保存时间

   有时我们需要在Mysql数据库中以“yyyy-MM-dd HH:mm:ss”形式保存时间。首先我们可以将字段定义为Timestamp类型。这样在JDBC中保存时间时也同样需要以Timestamp形式保存。

比如:我们定义了这样一张表:

CREATE TABLE `news` (
  nid int(11) NOT NULL AUTO_INCREMENT,
  title varchar(200) NOT NULL,
  author varchar(200) NOT NULL,
  pubdate timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  content longtext NOT NULL,
  lockflag int(11) DEFAULT '1',
) ;

其中pubdate字段保存时间,类型为Timestamp。当我们需要使用JDBC向表中插入数据时,可定义create()方法如下:

public boolean doCreate(News news) throws Exception {
        boolean flag = false;
        String sql = "INSERT INTO news(title, author, pubdate, content, lockflag) VALUES(?,?,?,?,?)";
        this.pstmt = this.conn.prepareStatement(sql);
        this.pstmt.setString(1, news.getTitle());
        this.pstmt.setString(2, news.getAuthor());
        this.pstmt.setTimestamp(3, new java.sql.Timestamp(news.getPubdate().getTime()));  // 默认为系统当前时间
        this.pstmt.setString(4, news.getContent());
        this.pstmt.setInt(5, news.getLockflag());
        if (this.pstmt.executeUpdate() > 0) {
            flag = true;
        }
        this.pstmt.close();
        return flag;
    }

因为News实例中的时间为java.util.Date类型,因此在添加到数据库前需要先转成java.sql.Timestamp类型。

2、如何把从数据库中读取的时间以“yyyy-MM-dd HH:mm:ss”形式显示

首先从数据库中取出pubdate字段值,然后保存在News实例news中:news.setPubdate(new java.util.Date(rs.getTimestamp(4).getTime()))。如果此时直接输出,则会以默认方式显示,比如:Thu Mar 12 21:48:57 CST 2020。这样并不符合常规的习惯,要将它以“yyyy-MM-dd HH:mm:ss”形式显示。还需要转换一下,首先定义java.text.SimpleDateFormat实例:SimpleDateFormat dateFromat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")。然后调用方法dateFormat.format(news.getPubdate()),会返回一个以“yyyy-MM-dd HH:mm:ss”形式表示时间的字符串。

经过这样一番操作就可以得到我们想要的时间格式,但是我们发现MySql从数据库中查出时间数据比实际时间晚八个小时。这是因为我们进行数据库连接时将DBURL定义成了:"jdbc:mysql://localhost:3306/mldnuseSSL=true&serverTimezone=UTC,其中serverTimezone为UTC,而中国大陆是在东八区,也就是比UTC多了八个小时(详情可以查阅UTC相关知识)。因此我们将参数修改为:serverTimezone=Asia/Shanghai, 就OK了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章