java中的日期和sql中的日期轉換以及java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Times

來源:互聯網
上載者:User

將"yyyy-mm-dd"格式的字串轉換為java.sql.Date:

SimpleDateFormat bartDateFormat =   new SimpleDateFormat("yyyy-MM-dd");  
String dateStringToParse = "2007-7-12";  
try{  
       java.util.Date date = bartDateFormat.parse(dateStringToParse);  
       java.sql.Date sqlDate = new java.sql.Date(date.getTime());
       System.out.println(sqlDate.getTime());  
}  
catch (Exception ex) {  
     System.out.println(ex.getMessage());  
}

 

java.util.Date, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp區別和聯絡:

 

在java有關的項目開發工作中,我們常常要java.util.Date,  java.util.Calendar,   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,並把它返回給客戶使用。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.