Java:Date、Calendar、Timestamp的使用


一、Java.util.Date

     該對象包含了年月日時分秒信息。具體使用如下代碼:

    //String 轉換為Date
    private static void dateDemo() throws ParseException{
        String dateStr="2016-05-31 13:45:04";
        String pattern="yyyy-MM-dd HH:mm:ss";
        DateFormat df=new SimpleDateFormat(pattern);
        Date date=df.parse(dateStr);
        System.out.println(date.getTime());
    }

注意:年月日時分秒的表現形式:

  • 年份 y 由整數 y - 1900 表示。
  • 月份由從 0 至 11 的整數表示;0 是一月、1 是二月等等;因此 11 是十二月。
  • 日期(一月中的某天)按通常方式由整數 1 至 31 表示。
  • 小時由從 0 至 23 的整數表示。因此,從午夜到 1 a.m. 的時間是 0 點,從中午到 1 p.m. 的時間是 12 點。
  • 分鍾按通常方式由 0 至 59 的整數表示。
  • 秒由 0 至 61 的整數表示;值 60 和 61 只對閏秒發生,盡管那樣,也只用在實際正確跟蹤閏秒的 Java 實現中。於按當前引入閏秒的方式,兩個閏秒在同一分鍾內發生是極不可能的,但此規范遵循 ISO C 的日期和時間約定。

二、Java.sql.Date

  包含年、月、日信息。繼承自Java.util.Date。在數據庫相關操作中使用,如rs.getDate,ps.setDate等。rs是指ResultSet,ps是指PreparedStatement。

  一個包裝了毫秒值的瘦包裝器 (thin wrapper),它允許 JDBC 將毫秒值標識為 SQL DATE 值。毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以來經過的毫秒數。

  為了與 SQL DATE 的定義一致,由 java.sql.Date 實例包裝的毫秒值必須通過將小時、分鍾、秒和毫秒設置為與該實例相關的特定時區中的零來“規范化”。

private static void sqlDateDemo(){
        Date d=new Date();  //java.util.date
        java.sql.Date sqld=    new java.sql.Date(d.getTime());  //轉換為java.sql.date
        System.out.println("sqld: --- "+sqld.getTime());
        System.out.println("sqld: toString--- "+sqld.toString());
    }

特別注意

  java.util.date與java.sql.date的ToString()方法的區別:

  運行結果:

java.utl.date:  toString()===Tue May 31 13:45:04 CST 2016
sqld: toString--- 2016-05-31

解釋:

  java.util.date的toString():把此 Date 對象轉換為以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

  java.sql.date的toString():格式化日期轉義形式 yyyy-mm-dd 的日期。

三、Java.util.calendar

  Calendar 類是一個抽象類,包含年、月、日、時、分、秒、毫秒信息。從JDK1.1開始引入,calendar用以代替java.util.Date。

//java.util.date與calendar的互轉
    private static void calendarDemo(){
        // Date轉為Calendar  
        Date date=new Date();  
        Calendar calendar=Calendar.getInstance();  
        calendar.setTime(date);  
          System.out.println("Calendar date:==="+calendar.DATE);
        // Calendar轉為Date  
        Calendar ca=Calendar.getInstance();     //當前時間
        Date d =(Date) ca.getTime();  
        System.out.println("java.util.date:toString()===:  "+d.toString());
    }

友情注意:Calendar獲取年月日的方法:

System.out.println("Calendar date:==="+calendar.get(calendar.DATE));  //--日期   紅色字體表示:獲取字段數字類似與索引

System.out.println("ca date:==="+ca.get(ca.DAY_OF_WEEK) );  //星期幾

四、java.sql.timestamp

包含年、月、日、時、分、秒、納秒(nano)信息。

繼承自java.util.Date。比java.sql.Date包含更多信息。在數據庫相關操作中使用,如rs.getTimestamp,ps.setTimeStamp等。例如:若數據庫中某字段hireDate為Oracle的Date類型,則使用getTimestamp時能夠將年、月、日、時、分、秒信息取出;但使用getDate時則只能取出年、月、日信息。因此,一般推薦使用getTimestamp。

    private static void timestampDemo(){
        Date date=new Date();
        // java.util.Calendar轉換為java.sql.Timestamp  
        new Timestamp(Calendar.getInstance().getTimeInMillis());  
        // java.util.Date轉換為java.sql.Timestamp  
        new Timestamp(date.getTime());  
        // String轉換為java.sql.Timestamp,String格式:yyyy-mm-dd hh:mm:ss[.f...] ,方括號表示可選  
        Timestamp.valueOf("2013-07-06 01:49:30"); 
    }

五、Oracle數據庫提供的日期和時間類型

Oracle數據庫提供了DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE和TIMESTAMP WITH LOCAL TIME ZONE四種類型。

DATE包含世紀、年、月、日、時、分、秒信息。

TIMESTAMP是DATE的擴展,包含年、月、日、時、分、秒和fractional seconds信息。定義TIMESTAMP的格式如下:

TIMESTAMP [(fractional_seconds_precision)]  
// 格式  
TIMESTAMP 'YYYY-MM-DD HH24:MI:SS.FF'  
// 一個例子  
TIMESTAMP '1997-01-31 09:26:50.12

其中fractional_seconds_precision是可選的,用於指定秒使用含幾位小數的浮點數表示,它的取值范圍是0到9,默認是6。上述例子中表示采用兩位小數,它的秒值是50.12。注意:12不是毫秒值,也不是微秒值。

 

參考文件:

http://docs.oracle.com/cd/B19306_01/server.102/b14225/ch4datetime.htm#i1005983

 


免責聲明!

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



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