java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp區別和總結


在web開發中,避免不了對日期的操作,就幾種常見的日期操作做個總結(部分參考網絡,在此表示感謝):

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp

 

java.lang.Object 
....|__java.util.Date 
..........|__java.sql.Date/java.sql.Timestamp /java.sql.Time

....|__java.security.Timestamp

 

java.util.Date日期格式為:年月日時分秒 
java.sql.Date日期格式為:年月日[只存儲日期數據不存儲時間數據] 
java.sql.Time日期格式為:時分秒 
java.sql.Timestamp日期格式為:年月日時分秒納秒(毫微秒)

關系:

    java.util.Date這個類是java.sql.Date,  java.sql.Time,  java.slq.Timestamp這三個類的父類。這三個類對java.util.Date類進行了包裝。

聯系:

    java.sql.Date類屏蔽了java.util.Date類的時間有關的方法(形如:hh:mm:ss),因此,不可以通過這個類訪問時間有關的信息,比如,如果你通過sqlDate.getHour()方法去訪問小時信息,此方法會拋出一個IllegalArgumentException異常。這是因為java.sql.Date在繼承java.util.Date類的時候對父類進行了重寫,禁用了時間訪問的方法。之所以這么處理,是為了和數據庫的Date數據類型相匹配,數據庫的Date數據類行只是保存日期有關的字段。

    Java.sql.Time類屏蔽了java.util.Date的日期有關的字段(形如:yyyy-MM-dd),因此,不能通過這個類訪問日期有關的信息,比如:如果你通過sqlTime.getYear()方法去獲取年有關的信息,此方法會拋出一個IllegalArgumentException異常。這是因為java.sql.Time在繼承java.util.Date類的時候對父類進行了重寫,禁用了日期訪問的方法。之所以這么處理,是為了和數據庫的Time數據類型相匹配,數據庫的Time數據類行只是保存時間有關的字段。

  Java.sql.Timestamp字段則對java.util.Date這個類進行了擴充,它在java.util.Date類的基礎上增加了毫秒的時間訪問控制,因此,你可以通過getNanos()方法去獲取時間的毫微秒數(注意此處獲取的時間是以毫微秒為單位的,1秒等於十億毫微秒),同樣的,這也是為了和數據庫中的Timestamp數據類型進行匹配。

理清了上述四個類的關系,那么java.util.Date和java.util.Calendar類有什么關系呢?

   Java.util.Calendar類是java.util.Date類的一個更加深入,更加全面的替代。Java.util.Calendar類支持java.util.Date的所有功能,此外,Calendar還引入了多語言,多區域的特性,可以根據需要獲取不同區域,不同時區的時間,Calendar還增加了比Date更加方便和快捷的許多操作,如獲取一年當中的第幾個星期,各個月的天數等便捷的方法。

 

注意:

Java.util.Calendar區別與java.util.Date的幾個地方也需要注意一下:首先,Calendar增加了毫秒的時間段,通過它可以獲取時間點的毫秒值,而java.util.Date只是精確到秒。其次,Calendar過去年的時候是當前年份比如:2010,而Date獲取年份的時獲取到的是當前年份-1900的一個值(2010-1900=110,因此,你調用getYear后過去的值就是110)。最后Calendar是一個抽象類,之所以能夠實例化,是因為此處的Calendar充當了一個類似於工廠的作用,在getInstance方法中實例化了Calendar子類GregorianCalendar,並把它返回給用戶使用。

 

針對不同的數據庫選用不同的日期類型 
·例如:Oracle的Date類型,只需要年月日,選擇使用java.sql.Date類型 
·MS Sqlserver數據庫的DateTime類型,需要年月日時分秒,選擇java.sql.Timestamp類型

轉載:http://www.iteye.com/topic/1137830


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM