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


原文:http://www.iteye.com/topic/1137830 html


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

 

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

....|__java.security.Timestamp數據庫

 

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

關係:ide

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

聯繫:.net

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

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

  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://blog.csdn.net/wsh622827/article/details/4985399


Java.sql.Date 只存儲日期數據不存儲時間數據 
// 會丟失時間數據 
preparedStatement.setDate(1, new java.sql.Date(date.getTime())); 
//能夠這樣來處理 
preparedStatement.setTimestamp(1, new java.sql.Timestamp(new java.util.Date().getTime())); 
//想要獲得完整的數據,包括日期和時間,能夠這樣 
java.util.Date d = resultSet.getTimestamp(1); 
//這樣處理更合適一些,能夠避免一些潛在Timestamp 問題 
java.util.Date d = new java.util.Date(resultSet.getTimestamp(1).getTime()); 
這樣的話: 
        往數據庫存儲的時候能夠接收 java.util.Date類型 再用getTime()方法獲得表明那個Date對象的long值,再以這個long值 構造一個Timestamp對象 存進數據庫中。 
       從存數據庫裏取的時候,能夠先獲得Timestamp用他的getTime()方法獲得long值,再以這個long值構造一個java.util.Date對象,這樣就能夠對這個Date對象操做了。例如 new SimpleTimeFormat("yyyyy-MM-dd HH:mm:ss").format()等等

相關文章
相關標籤/搜索