java.util.Date与 java.sql.Date两个包下Date的区别与联系
一般我在項目中導入需要的包,大部分情況下都會根據IDE的提示自動導入默認的包,少數情況下會掃一眼,看看是不是需要的包,極少情況會斟酌一下,確認一下這就是需要的包。
最近在項目中導入JDK中的Date包時,在后來回看代碼的時候,發現不同的類中導入的Date依賴包還不太一樣,也是那個時候才發現Date在倆不同的包中。之前沒有注意過這個問題,那這倆包中的日期有什么聯系與區別呢?
區別與聯系:
這三個類都是對應于jdbc處理日期格式的類,只是有著不同的日期精度和格式。
java.sql.Date類:
? 為了與 SQL DATE 的定義一致,由 java.sql.Date 實例包裝的毫秒值必須通過將小時、分鐘、秒和毫秒設置為與該實例相關的特定時區中的零來“規范化”。
? 【以上來官方api】
簡要的說: 日期格式“規范化”的java.sql.Date只包含年月日信息,時分秒毫秒都會清零。格式類似:YYYY-MM-DD。當我們調用ResultSet的getDate()方法來獲得返回值時,java程序會參照"規范"的java.sql.Date來格式化數據庫中的數值。因此,如果數據庫中存在的非規范化部分的信息將會被截取。 也就是說,如果是 2020-12-05 15:15:25 這樣的時間點存取數據,那么存在數據庫中的值就是:2020-12-05 00:00:00
類型轉換: 如果把java.sql.Date值通過PrepareStatement的setDate方法存入數據庫時,java程序會對傳入的java.sql.Date規范化,非規范化的部分將會被劫取。然而,我們java.sql.Date一般由java.util.Date轉換過來,如:java.sql.Date sqlDate=new java.sql.Date(new java.util.Date().getTime()). 顯然,這樣轉換過來的java.sql.Date往往不是一個規范的java.sql.Date.要保存java.util.Date的精確值, 需要利用java.sql.Timestamp.
時間顯示格式:
【父類】java.util.Date日期格式為:年月日時分秒
【子類】java.sql.Date日期格式為:年月日[只存儲日期數據不存儲時間數據]
【子類】java.sql.Time日期格式為:時分秒
【子類】java.sql.Timestamp日期格式為:年月日時分秒納秒(毫微秒)
四種對象內部均使用系統時間作為標準數據 :
·系統時間:自 1970 年 1 月 1 日 00:00:00 GMT 以來的毫秒數,即格林尼治標準時間(GMT)
·本地時間:根據時區不同打印出來的時間[當時區為GMT+0時,系統時間與本地時間相同]
我們使用的是以本地時間為參考標準的
針對不同的數據庫選用不同的日期類型 :
? 需要了解數據庫里存儲時間的精度。
? Date類處理。基本上,數據庫通常至少支持三種日期時間字段的形式,即日期、時間和時間戳。在jdbc和它們中的每一個java.util.Date..這三種語言的快速語義如下:java.sql.Date對應于sql日期,這意味著它存儲年月日當小時、分鐘、秒和毫秒被忽視了。java.sql.Time對應于sql time,只包含以下信息:小時、分鐘、秒和毫秒.java.sql.Timestamp對應于SQL時間戳,該時間戳的確切日期為納秒(util.Date只支持毫秒!)具有可定制的精度。與這三種類型相關的使用JDBC驅動程序時最常見的錯誤之一是,這些類型被錯誤地處理。這意味著sql.Date時區是特定的嗎,sql.Time包含當前年份、月份和日等。最后:用哪一個?實際上取決于字段的SQL類型,Java處理時可以格式化日期。? 有些數據庫,比如MySQL,精度為毫秒,然而另一些數據庫,包括Oracle,存儲SQL DATE類型數據時,毫秒部分的數據是不保存的。以下操作中容易出現不易被發現的BUG:獲得一個JAVA里的日期對象。從數據庫里讀取日期試圖比較兩個日期對象是否相等。如果毫秒部分丟失,本來認為相等的兩個日期對象用Equals方法可能返回false。.sql.Timestamp類比java.util.Date類精確度要高。這個類包了一個getTime()方法,但是它不會返回額外精度部分的數據,因此必須使用...總之,java.util.Date 就是Java的日期對象,而java.sql.Date 是針對SQL語句使用的,只包含日期而沒有時間部分。
總結
以上是生活随笔為你收集整理的java.util.Date与 java.sql.Date两个包下Date的区别与联系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: int、bigint、mediumint
- 下一篇: 使用Java8新特性(stream流、L