java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp區別和聯絡,java.sql.timestamp

來源:互聯網
上載者:User

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp區別和聯絡,java.sql.timestamp

參考:連結
在Web開發中,避免不了對日期的操作,常用的關於時間的類有這麼幾個:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp,這幾個類在JDK的定義如下所示:
java.lang.Object
….|__java.util.Date
……….|__java.sql.Date/java.sql.Timestamp/java.sql.Time
….|__java.security.Timestamp
java.util.Date日期格式為:年月日時分秒
java.sql.Date日期格式為:年月日[只儲存日期資料不儲存時間資料,是專門針對sql設計]
java.sql.Time日期格式為:時分秒
java.sql.Timestamp日期格式為:年月日時分秒納秒(毫微秒)
這些類的關係如下所示:
java.util.Date這個類是java.sql.Date, java.sql.Time, java.sql.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.Date類有getTime方法返回毫秒數,所以它可以與java.util.Date進行互換:
java.sql.Date轉為java.util.Date
java.sql.Date sqlDate=new java.sql.Date();
java.util.Date utilDate=new java.util.Date (sqlDate.getTime());
java.util.Date轉為java.sql.Date
java.util.Date utilDate=new Date();
java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());

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

java.sql.date 是只包含了日期。而 java.sql.time 只包含了一個時間。java.sql.time java.sql.date 二者如何組合成一個java.util.date呢?取毫秒相加,作為java.util.date的構造方法參數就可以了。
java.sql.Date d = new java.sql.Date(new java.util.Date().getTime());
java.sql.Time t = new java.sql.Time(new java.util.Date().getTime());
java.util.Date day = new java.util.Date(d.getTime() + t.getTime());
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,並把它返回給使用者使用。

Java中之間轉換

package demo;import java.sql.Timestamp;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class TestData {    public static void main(String[] args) throws ParseException {        Date d = new Date(new Date().getTime());        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        String nowday1 = "2015-5-12 10:30:12";        String nowday2 = "2015-05-12 10:30:12";        Timestamp tt = new Timestamp(System.currentTimeMillis());        System.out.println(sdf.format(d));//Date -> String        System.out.println(sdf.parse(nowday1)); // String -> Date        System.out.println(sdf.format(tt)); // Timestamp -> String        System.out.println(tt.valueOf(nowday2));//String -> Timestamp   :String的類型必須形如: yyyy-mm-dd hh:mm:ss[.f...] 這樣的格式,中括弧表示可選,否則報錯        System.out.println(d=tt); // Timestamp -> Date  因為是父類直接向上轉型        System.out.println(new Timestamp(d.getTime())); // Date ->Timestamp    }}/* * oracle中Date與Timestamp轉換 * SELECT TO_TIMESTAMP(TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'),  'YYYY-MM-DD HH24:MI:SS')  FROM dual; * SELECT TO_DATE(TO_CHAR(TO_TIMESTAMP(TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') FROM dual; * *  *//**2015-05-12 10:44:15Tue May 12 10:30:12 CST 20152015-05-12 10:44:152015-05-12 10:30:12.02015-05-12 10:44:15.1082015-05-12 10:44:15.108**/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.