創(chuàng)建一個日期對象
讓我們看一個使用系統(tǒng)的當(dāng)前日期和時間創(chuàng)建一個日期對象并返回一個長整數(shù)的簡單例子. 這個時間通常被稱為Java 虛擬機(JVM)主機環(huán)境的系統(tǒng)時間.
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的樣子, 上面的例子在系統(tǒng)輸出設(shè)備上顯示的結(jié)果是 1001803809710. 在這個例子中,值得注意的是我們使用了Date 構(gòu)造函數(shù)創(chuàng)建一個日期對象, 這個構(gòu)造函數(shù)沒有接受任何參數(shù). 而這個構(gòu)造函數(shù)在內(nèi)部使用了System.currentTimeMillis() 方法來從系統(tǒng)獲取日期.
那么, 現(xiàn)在我們已經(jīng)知道了如何獲取從1970年1月1日開始經(jīng)歷的毫秒數(shù)了. 我們?nèi)绾尾拍芤砸环N用戶明白的格式來顯示這個日期呢? 在這里類java.text.SimpleDateFormat 和它的抽象基類 java.text.DateFormat 就派得上用場了.
日期數(shù)據(jù)的定制格式
假如我們希望定制日期數(shù)據(jù)的格式, 比方星期六-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 的構(gòu)造函數(shù)傳遞格式字符串"EEE-MMMM-dd-yyyy", 我們就能夠指明自己想要的格式. 你應(yīng)該可以看見, 格式字符串中的ASCII 字符告訴格式化函數(shù)下面顯示日期數(shù)據(jù)的哪一個部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的個數(shù)決定了日期是如何格式化的.傳遞"EE-MM-dd-yy"會顯示 Sat-09-29-01. 請察看Sun 公司的Web 站點獲取日期格式化選項的完整的指示.
將文本數(shù)據(jù)解析成日期對象
假設(shè)我們有一個文本字符串包含了一個格式化了的日期對象, 而我們希望解析這個字符串并從文本日期數(shù)據(jù)創(chuàng)建一個日期對象. 我們將再次以格式化字符串"MM-dd-yyyy" 調(diào)用SimpleDateFormat類, 但是這一次, 我們使用格式化解析而不是生成一個文本日期數(shù)據(jù). 我們的例子, 顯示在下面, 將解析文本字符串"9-29-2001"并創(chuàng)建一個值為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());
????????}
????}
}
使用標(biāo)準(zhǔn)的日期格式化過程
既然我們已經(jīng)可以生成和解析定制的日期格式了, 讓我們來看一看如何使用內(nèi)建的格式化過程. 方法 DateFormat.getDateTimeInstance() 讓我們得以用幾種不同的方法獲得標(biāo)準(zhǔn)的日期格式化過程. 在下面的例子中, 我們獲取了四個內(nèi)建的日期格式化過程. 它們包括一個短的, 中等的, 長的, 和完整的日期格式.
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的每次調(diào)用中都傳遞了兩個值. 第一個參數(shù)是日期風(fēng)格, 而第二個參數(shù)是時間風(fēng)格. 它們都是基本數(shù)據(jù)類型int(整型). 考慮到可讀性, 我們使用了DateFormat 類提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道獲取時間和日期格式化過程的更多的方法和選項, 請看Sun 公司W(wǎng)eb 站點上的解釋.
運行我們的例子程序的時候, 它將向標(biāo)準(zhǔn)輸出設(shè)備輸出下面的內(nèi)容:
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