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了!