1、MySQL中時(shí)間類型分類
下表列出了四種時(shí)間類型以及相關(guān)對(duì)比:
日期類型| 存儲(chǔ)空間 |日期格式 |日期范圍|零值
---|---|---|---
DATETIME| 8 bytes | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |0000-00-00 00:00:00
TIMESTAMP| 4 bytes | YYYY-MM-DD HH:MM:SS| 1970-01-01 00:00:01 ~ 2038|00000000000000
TIME | 3 bytes| HH:MM:SS | -838:59:59~838:59:59|00:00:00
DATE | 3 bytes |YYYY-MM-DD|1000-01-01 ~ 9999-12-31 |0000-00-00
YEAR | 1 bytes |YYYY|1901 ~ 2155|0000
每種日期時(shí)間類型都有一個(gè)有效值范圍,如果超出這個(gè)范圍,在默認(rèn)的SQLMode下會(huì)報(bào)錯(cuò),并以零值(見(jiàn)上表)存儲(chǔ)。
DATETIME
DATETIME 用于表示年-月-日 時(shí):分:秒,是 DATE 和 TIME 的組合,并且記錄的年份比較長(zhǎng)久。TIMESTAMP
TIMESTAMP 用于表示年-月-日 時(shí):分:秒,但是記錄的年份比較短暫。
TIMESTAMP 和時(shí)區(qū)相關(guān),更能反映當(dāng)前時(shí)間。當(dāng)插入日期時(shí),會(huì)先轉(zhuǎn)換為本地時(shí)區(qū)后再存放;當(dāng)查詢?nèi)掌跁r(shí),會(huì)將日期轉(zhuǎn)換為本地時(shí)區(qū)后再顯示。所以不同時(shí)區(qū)的人看到的同一時(shí)間是不一樣的。
表中的第一個(gè) TIMESTAMP 列自動(dòng)設(shè)置為系統(tǒng)時(shí)間(CURRENT_TIMESTAMP)。當(dāng)插入或更新一行,但沒(méi)有明確給 TIMESTAMP 列賦值,也會(huì)自動(dòng)設(shè)置為當(dāng)前系統(tǒng)時(shí)間。如果表中有第二個(gè) TIMESTAMP 列,則默認(rèn)值設(shè)置為0000-00-00 00:00:00。
TIMESTAMP 的屬性受 Mysql 版本和服務(wù)器 SQLMode 的影響較大。
如果記錄的日期需要讓不同時(shí)區(qū)的人使用,最好使用 TIMESTAMP。DATE
DATE 用于表示年-月-日,如果實(shí)際應(yīng)用值需要保存年月日,就可以使用 DATE。TIME
TIME 用于表示時(shí)分秒,如果實(shí)際應(yīng)用值需要保存時(shí)分秒 就可以使用 TIME。
負(fù)值為了滿足兩個(gè)日期時(shí)間相減才
YEAR
YEAR 用于表示 年份,YEAR 有 2 位(最好使用4位)和 4 位格式的年。 默認(rèn)是4位。如果實(shí)際應(yīng)用只保存年份,那么用 1 bytes 保存 YEAR 類型完全可以,不但能夠節(jié)約存儲(chǔ)空間,還能提高表的操作效率。
2、Java中與MySQL數(shù)據(jù)庫(kù)時(shí)間類型對(duì)應(yīng)的時(shí)間類型
| MySQL | java |
|---|---|
| Datetime | java.sql.Timestamp |
| Timestamp | java.sql.Timestamp |
| Date | java.sql.Date |
| Time | java.sql.Time |
| Year | java.sql.Date |
-
java.sql.Timestamp、java.sql.Date、java.sql.Time都是java.util.Date的子類,適合跟數(shù)據(jù)庫(kù)交互。 - 將
java.util.Date類型的時(shí)間轉(zhuǎn)成java.sql.Date類型時(shí)間
Date time= new java.sql.Date(new java.util.Date().getTime());
- 將
java.util.Date類型的時(shí)間轉(zhuǎn)成java.sql.Timestamp類型時(shí)間
//獲得系統(tǒng)時(shí)間
Date date = new Date();
//將時(shí)間格式轉(zhuǎn)換成符合Timestamp要求的格式.
String now = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(date);
//轉(zhuǎn)換
Timestamp timestamp =Timestamp.valueOf(now);