日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java.util.Date与 java.sql.Date两个包下Date的区别与联系

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java.util.Date与 java.sql.Date两个包下Date的区别与联系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一般我在項目中導入需要的包,大部分情況下都會根據IDE的提示自動導入默認的包,少數情況下會掃一眼,看看是不是需要的包,極少情況會斟酌一下,確認一下這就是需要的包。
最近在項目中導入JDK中的Date包時,在后來回看代碼的時候,發現不同的類中導入的Date依賴包還不太一樣,也是那個時候才發現Date在倆不同的包中。之前沒有注意過這個問題,那這倆包中的日期有什么聯系與區別呢?


區別與聯系:

首先查看Api,發現java.sql.Date是java.util.Date的子類。



這三個類都是對應于jdbc處理日期格式的類,只是有著不同的日期精度和格式。

java.sql.Date類:

? 一個包裝了毫秒值的瘦包裝器 (thin wrapper),它允許 JDBC 將毫秒值標識為 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以來經過的毫秒數。
? 為了與 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的区别与联系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。