一直沒有搞清java.util.Date 和 java.sql.Date 的區別,總結一下
java.util.Date 和 java.sql.Date的關係
java.sql.Date是繼承java.util.Date的類,看看其在jdk裏的源碼解釋
A thin wrapper around a millisecond value that allows JDBC to identify this as an SQL <code>DATE</code> value. A milliseconds value represents the number of milliseconds that have passed since January 1, 1970 00:00:00.000 GMT.
意思其實就是很薄的一層封裝,目的就是爲了讓JDBC能夠識別這是一個SQL的date類型,再粗略的看看它到底封裝了什麼,其實也沒發現什麼,不過toString方法是被覆寫了,猜測是寫入數據庫時有特殊的格式要求吧,沒有深究。總結一下:java.util.Date是用在除數據庫以外的地方,兩者之間也可以互相轉換。
java.sql.Date,java.sql.Time, java.sql.Timestamp的關係
看到java.sql.Date,順便也引出了java.sql.Time, java.sql.Timestamp這2個看似有些關聯的類,參考https://www.cnblogs.com/airduce/p/7069491.html發現,其實這3個類都是java.util.Date的子類,最主要的區別是裏面覆蓋了toString方法,簡單總結一下,就是這3個類裏面保存的時間是一樣的,只是最終在打印即調用toString方法時,有選擇的輸出相應應的值,寫了如下的代碼測試了這個想法:
java.util.Date utilDate = new Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
java.sql.Timestamp timestamp = new java.sql.Timestamp(utilDate.getTime());
java.sql.Time time = new java.sql.Time(utilDate.getTime());
System.out.println(utilDate);
System.out.println(sqlDate);
System.out.println(timestamp);
System.out.println(time);
//強制轉換一下
java.util.Date convertDate = time;
System.out.println(convertDate);
//時間精度並未丟失,但是打印的值按照Time格式輸出
System.out.println(utilDate.getTime());
System.out.println(convertDate.getTime());
java.util.Date newDate = new Date(time.getTime());
System.out.println(newDate);
Mysql中Timestamp和Datetime的使用選擇
參考http://www.cnblogs.com/ivictor/p/5028368.html的說明,
對於TIMESTAMP,它把客戶端插入的時間從當前時區轉化爲UTC(世界標準時間)進行存儲。查詢時,將其又轉化爲客戶端當前時區進行返回,所能存儲的時間範圍爲:'1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999'。
對於DATETIME,不做任何改變,基本上是原樣輸入和輸出,所能存儲的時間範圍爲:'1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。
歡迎關注我的個人的博客www.zhijianliu.cn, 虛心求教,有錯誤還請指正輕拍,謝謝
版權聲明:本文出自志健的原創文章,未經博主允許不得轉載