JAVA基礎_Date,Calender應用

API— java.util.Date:日期類,月份從0-11;

在JDK 1.1後,java.util.Date 類型的大多數方法已經不推薦使用了。代替它的是Calendar。

而在java.sql.Date 和 java.util.Date之間,有些微妙的關係。

如何將Date類型插入數據庫中,成爲好多人的一個不小的障礙。

我們將討論下面的類:

  1. 具體類(和抽象類相對)java.util.Date
  2. 抽象類java.text.DateFormat 和它的一個具體子類,java.text.SimpleDateFormat
  3. 抽象類java.util.Calendar 和它的一個具體子類,java.util.GregorianCalendar

具體類可以被實例化, 但是抽象類卻不能. 你首先必須實現抽象類的一個具體子類.

Date 類從Java 開發包(JDK) 1.0 就開始進化, 當時它只包含了幾個取得或者設置一個日期數據的各個部分的方法, 比如說月, 日, 和年. 這些方法現在遭到了批評並且已經被轉移到了Calendar類裏去了, 我們將在本文中進一步討論它. 這種改進旨在更好的處理日期數據的國際化格式. 就象在JDK 1.1中一樣, Date 類實際上只是一個包裹類, 它包含的是一個長整型數據, 表示的是從GMT(格林尼治標準時間)1970年, 1 月 1日00:00:00這一刻之前或者是之後經歷的毫秒數.

一、創建一個日期對象

讓我們看一個使用系統的當前日期和時間創建一個日期對象並返回一個長整數的簡單例子. 這個時間通常被稱爲Java 虛擬機(JVM)主機環境的系統時間.

import java.util.Date;

public class DateExample1 { 
public static void main(String[] args) { 
// Get the system date/time 
Date date = new Date();

System.out.println(date.getTime()); 
} 
}

在星期六, 2001年9月29日, 下午大約是6:50的樣子, 上面的例子在系統輸出設備上顯示的結果是 1001803809710. 在這個例子中,值得注意的是我們使用了Date 構造函數創建一個日期對象, 這個構造函數沒有接受任何參數. 而這個構造函數在內部使用了System.currentTimeMillis() 方法來從系統獲取日期.

那麼, 現在我們已經知道了如何獲取從1970年1月1日開始經歷的毫秒數了. 我們如何才能以一種用戶明白的格式來顯示這個日期呢? 在這裏類java.text.SimpleDateFormat 和它的抽象基類 java.text.DateFormat 就派得上用場了.

二、日期數據的定製格式

假如我們希望定製日期數據的格式, 比方星期六-9月-29日-2001年. 下面的例子展示瞭如何完成這個工作:

import java.text.SimpleDateFormat; 
import java.util.Date;

public class DateExample2 {

public static void main(String[] args) {

SimpleDateFormat bartDateFormat = 
new SimpleDateFormat("EEEE-MMMM-dd-yyyy");

Date date = new Date();

System.out.println(bartDateFormat.format(date)); 
} 
}

只要通過向SimpleDateFormat 的構造函數傳遞格式字符串”EEE-MMMM-dd-yyyy”, 我們就能夠指明自己想要的格式. 你應該可以看見, 格式字符串中的ASCII 字符告訴格式化函數下面顯示日期數據的哪一個部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的個數決定了日期是如何格式化的.傳遞”EE-MM-dd-yy”會顯示 Sat-09-29-01. 請察看Sun 公司的Web 站點獲取日期格式化選項的完整的指示.

三、將文本數據解析成日期對象

假設我們有一個文本字符串包含了一個格式化了的日期對象, 而我們希望解析這個字符串並從文本日期數據創建一個日期對象. 我們將再次以格式化字符串”MM-dd-yyyy” 調用SimpleDateFormat類, 但是這一次, 我們使用格式化解析而不是生成一個文本日期數據. 我們的例子, 顯示在下面, 將解析文本字符串”9-29-2001”並創建一個值爲001736000000 的日期對象.

例子程序:

import java.text.SimpleDateFormat; 
import java.util.Date;

public class DateExample3 {

public static void main(String[] args) { 
// Create a date formatter that can parse dates of 
// the form MM-dd-yyyy. 
SimpleDateFormat bartDateFormat = 
new SimpleDateFormat("MM-dd-yyyy");

// Create a string containing a text date to be parsed. 
String dateStringToParse = "9-29-2001";

try { 
// Parse the text version of the date. 
// We have to perform the parse method in a 
// try-catch construct in case dateStringToParse 
// does not contain a date in the format we are expecting. 
Date date = bartDateFormat.parse(dateStringToParse);

// Now send the parsed date as a long value 
// to the system output. 
System.out.println(date.getTime()); 
} 
catch (Exception ex) { 
System.out.println(ex.getMessage()); 
} 
} 
}

五、使用標準的日期格式化過程

既然我們已經可以生成和解析定製的日期格式了, 讓我們來看一看如何使用內建的格式化過程. 方法 DateFormat.getDateTimeInstance() 讓我們得以用幾種不同的方法獲得標準的日期格式化過程. 在下面的例子中, 我們獲取了四個內建的日期格式化過程. 它們包括一個短的, 中等的, 長的, 和完整的日期格式.

import java.text.DateFormat; 
import java.util.Date;

public class DateExample4 {

public static void main(String[] args) { 
Date date = new Date();

DateFormat shortDateFormat = 
DateFormat.getDateTimeInstance( 
DateFormat.SHORT, 
DateFormat.SHORT);

DateFormat mediumDateFormat = 
DateFormat.getDateTimeInstance( 
DateFormat.MEDIUM, 
DateFormat.MEDIUM);

DateFormat longDateFormat = 
DateFormat.getDateTimeInstance( 
DateFormat.LONG, 
DateFormat.LONG);

DateFormat fullDateFormat = 
DateFormat.getDateTimeInstance( 
DateFormat.FULL, 
DateFormat.FULL);

System.out.println(shortDateFormat.format(date)); 
System.out.println(mediumDateFormat.format(date)); 
System.out.println(longDateFormat.format(date)); 
System.out.println(fullDateFormat.format(date)); 
} 
}

注意我們在對 getDateTimeInstance的每次調用中都傳遞了兩個值. 第一個參數是日期風格, 而第二個參數是時間風格. 它們都是基本數據類型int(整型). 考慮到可讀性, 我們使用了DateFormat 類提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道獲取時間和日期格式化過程的更多的方法和選項, 請看Sun 公司Web 站點上的解釋.

運行我們的例子程序的時候, 它將向標準輸出設備輸出下面的內容:
9/29/01 8:44 PM
Sep 29, 2001 8:44:45 PM
September 29, 2001 8:44:45 PM EDT
Saturday, September 29, 2001 8:44:45 PM EDT

當然,並不一定要在外部插入時間,因爲在數據庫中,可以讓它自動插入,比如:MSSQL裏面,用

getdate()來插入當前時間,而在Insert時,便可以不用管它了。但有的時候還是避免不了,要手工插入

時間,以更新數據庫。

API— java.util. Calendar:日曆類

public static void method(){
        Calendar c = Calendar.getInstance();
        System.out.println(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"
                        +getNum(c.get(Calendar.DAY_OF_MONTH))+"日"
                        +"星期"+getWeek(c.get(Calendar.DAY_OF_WEEK)));
    }
    public static String getNum(int num){
        return num>9 ? num+"" : "0"+num;
    }
    public static String getWeek(int index){
    /*
    查表法:建立數據的對應關係.
    最好:數據個數是確定的,而且有對應關係。如果對應關係的一方,是數字,而且可以作爲角標,那麼可以通過數組來作爲表。
    */
        String[] weeks = {"","日","一","二","三","四","五","六"};
        return weeks[index];
    }

package MyTest;

/*
 * 演示 Calendar 的一般操作
 */
import java.util.Date;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.util.Calendar;

public class Test
{
  public Test()
  {
  }

  public static void main(String[] args)
  {
    // 字符串轉換日期格式
    // DateFormat fmtDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // 得到日期格式對象
    // Date date = fmtDateTime.parse(strDateMake);

    // 完整顯示日期時間
    String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")).format(new Date());
    System.out.println(str);

    // 創建 Calendar 對象
    Calendar calendar = Calendar.getInstance();
    // 初始化 Calendar 對象,但並不必要,除非需要重置時間
    calendar.setTime(new Date());

    // setTime 類似上面一行
    // Date date = new Date();
    // calendar.setTime(date);

    // 顯示年份
    int year = calendar.get(Calendar.YEAR);
    System.out.println("YEAR is = " + String.valueOf(year));

    // 顯示月份 (從0開始, 實際顯示要加一)
    int MONTH = calendar.get(Calendar.MONTH);
    System.out.println("MONTH is = " + (MONTH + 1));

    // 今年的第 N 天
    int DAY_OF_YEAR = calendar.get(Calendar.DAY_OF_YEAR);
    System.out.println("DAY_OF_YEAR is = " + DAY_OF_YEAR);

    // 本月第 N 天
    int DAY_OF_MONTH = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println("DAY_OF_MONTH = " + String.valueOf(DAY_OF_MONTH));

    // 3小時以後
    calendar.add(Calendar.HOUR_OF_DAY, 3);
    int HOUR_OF_DAY = calendar.get(Calendar.HOUR_OF_DAY);
    System.out.println("HOUR_OF_DAY + 3 = " + HOUR_OF_DAY);

    // 當前分鐘數
    int MINUTE = calendar.get(Calendar.MINUTE);
    System.out.println("MINUTE = " + MINUTE);

    // 15 分鐘以後
    calendar.add(Calendar.MINUTE, 15);
    MINUTE = calendar.get(Calendar.MINUTE);
    System.out.println("MINUTE + 15 = " + MINUTE);

    // 30分鐘前
    calendar.add(Calendar.MINUTE, -30);
    MINUTE = calendar.get(Calendar.MINUTE);
    System.out.println("MINUTE - 30 = " + MINUTE);

    // 格式化顯示
    str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
    System.out.println(str);

    // 重置 Calendar 顯示當前時間
    calendar.setTime(new Date());
    str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS")).format(calendar.getTime());
    System.out.println(str);

    // 創建一個 Calendar 用於比較時間
    Calendar calendarNew = Calendar.getInstance();

    // 設定爲 5 小時以前,後者大,顯示 -1
    calendarNew.add(Calendar.HOUR, -5);
    System.out.println("時間比較:" + calendarNew.compareTo(calendar));

    // 設定7小時以後,前者大,顯示 1
    calendarNew.add(Calendar.HOUR, +7);
    System.out.println("時間比較:" + calendarNew.compareTo(calendar));

    // 退回 2 小時,時間相同,顯示 0
    calendarNew.add(Calendar.HOUR, -2);
    System.out.println("時間比較:" + calendarNew.compareTo(calendar));
  }
}
發佈了36 篇原創文章 · 獲贊 33 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章