如何以“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了!

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