Java 語(yǔ)言提供了理日期的工具。其中一些工具在其他語(yǔ)言中使用起來(lái)更困一些。管如此,Java 語(yǔ)言提供的那些工具幾乎可以做創(chuàng)建日期方面的任何事情,完全根據(jù)想要的格式對(duì)這些日期進(jìn)行格式化。
當(dāng) Java 語(yǔ)言出錯(cuò)時(shí)它會(huì)包含一個(gè)叫做 Date 這個(gè)類對(duì)創(chuàng)建和理日期很有助。不幸的是,這個(gè)類在支持同步方面表現(xiàn)不是很好,所以 Sun 添加了兩個(gè)幫助改善這種

· Calendar 
· DateFormat 
首先討論一下 Calendar,稍后再討論 DateFormat

創(chuàng) Date 仍然比容易:

Date aDate = new Date(System.currentTimeMillis());
或者可以使用以下代

Date aDate = new Date();
這將為提供一個(gè)表示當(dāng)前確切日期和時(shí)間 Date當(dāng)前地區(qū) 格式示。國(guó)際化已經(jīng)超出了本程的范,只要知道得的 Date 本地機(jī)器的地區(qū)時(shí)間一致即可。

然有了一個(gè)實(shí)例,不能呢?坦率地說(shuō)太小了。我可以個(gè) Date 另一個(gè)日期進(jìn)行比看前一個(gè)日期是在后一個(gè)日期的 before()  after()可以通過(guò)調(diào) setTime() 日期重新設(shè)個(gè)新的時(shí)間setTime() 有一個(gè) long 參數(shù)該參數(shù)表示 1970  1  1 日午夜起至現(xiàn)過(guò)去了多少毫秒,也正是 System.currentTimeMillis() 返回的。在此之外,我受到了限制。


現(xiàn)在,Date 們帶來(lái)的混要多于它為們帶來(lái)的有用性,因大部分日期理行都受到人的抨。人們習(xí)慣并設(shè)置部分 Date(比如,年、月,等等)。現(xiàn)在,必時(shí)處 Date  Calendar 才能設(shè)置部分 Date。但是一旦有了 Date 實(shí)例,就可以使用 Calendar 并設(shè)置部分 Date。例如:

Date aDate = new Date(System.currentTimeMillis());
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTime(aDate);
里,我們創(chuàng)建了一個(gè) GregorianCalendar并將它時(shí)間設(shè)以前創(chuàng)建的 Date。通過(guò) Calendar 調(diào)用不同的方法,也能做到一點(diǎn):

Calendar calendar = GregorianCalendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
過(guò) Calendar,我們現(xiàn)在可以訪問(wèn)和操作 Date 件。并設(shè)置部分 Date 也成個(gè)簡(jiǎn)單過(guò)程。只需要在 Calendar 調(diào)用適當(dāng) getter  setter 即可,如下所示:

calendar.set(Calendar.MONTH, Calendar.JULY);
calendar.set(Calendar.DAY_OF_MONTH, 15);
calendar.set(Calendar.YEAR, 1978);
calendar.set(Calendar.HOUR, 2);
calendar.set(Calendar.MINUTE, 15);
calendar.set(Calendar.SECOND, 37);
System.out.println(calendar.getTime());
這將輸 1987  7  15 日上午 2 點(diǎn) 15  37 秒的格式化后的出字符串。(在 Calendar 上也有一些助方法,允時(shí)設(shè)置一些或幾乎所有的件。)調(diào)用的是 set()它帶兩個(gè)參數(shù)

·
想要設(shè)置的 Date  field(或件)。
 
·
字段的
 
可以用 Calendar 中指定的常數(shù)來(lái)引用些字段。在某些情下,同一字段會(huì)有一個(gè)以上的名,比如 Calendar.DAY_OF_MONTH可以用 Calendar.DATE 來(lái)引用。除了可能是 Calendar.MONTH  Calendar.DATE 之外,其他的都很簡(jiǎn)單。在 Java 語(yǔ)言的日期中,月是基于 0 的(也就是說(shuō)月是 0),使得使用指定的常數(shù)來(lái)設(shè)置月份值明智之,但也使得正確地示日期成令人沮的事。小時(shí)數(shù)值 0  24

一旦有一個(gè)建立好的 Date,就可以提取其中的一部分。

System.out.println("The YEAR is: " + calendar.get(Calendar.YEAR));
System.out.println("The MONTH is: " + calendar.get(Calendar.MONTH));
System.out.println("The DAY is: " + calendar.get(Calendar.DATE));
System.out.println("The HOUR is: " + calendar.get(Calendar.HOUR));
System.out.println("The MINUTE is: " + calendar.get(Calendar.MINUTE));
System.out.println("The SECOND is: " + calendar.get(Calendar.SECOND));
System.out.println("The AM_PM indicator is: " + calendar.get(Calendar.AM_PM));
內(nèi)置日期的格式化

通常可以使用 Date 格式化日期。現(xiàn)在,必使用其他幾個(gè)類

· DateFormat 
· SimpleDateFormat 
· DateFormatSymbols 
里,我們并不想介日期格式化所涉及的所有復(fù)雜事物。可以自己去。但我一些使用些工具的基礎(chǔ)識(shí)

DateFormat 
們創(chuàng)建特定于場(chǎng)所的格式化程序,如下所示:

DateFormat dateFormatter = DateFormat.getDateInstance(DateFormat.DEFAULT);
Date aDate = new Date();
String formattedDate = dateFormatter.format(today);
使用用于這種場(chǎng)所的默認(rèn)格式創(chuàng)建了一個(gè)格式化的日期字符串。在我的機(jī)器上,這個(gè)日期字符串看起來(lái)這樣的:

Nov 11, 2005
是默認(rèn)樣式,但所有的式都適用于我。我可以使用任何預(yù)式。可以調(diào) DateFormat.getTimeInstance() 來(lái)格式化時(shí)間,或者調(diào) DateFormat.getDateTimeInstance() 日期和時(shí)間一起格式化。以下是各種樣式的出,都適用于美國(guó)區(qū)

日期 時(shí)間 日期/時(shí)間

DEFAULT  Nov 11, 2005 7:44:56 PM Nov 11, 2005 7:44:56 PM
SHORT  11/11/05 7:44 PM 11/11/05 7:44 PM
MEDIUM  Nov 11, 2005 7:44:56 PM Nov 11, 2005 7:44:56 PM
LONG  November 11, 2005 7:44:56 PM EST November 11, 2005 7:44:56 PM EST
FULL  Thursday, November 11, 2005 7:44:56 PM EST Thursday, November 11, 2005 7:44:56 PM EST
定制格式化
:
預(yù)的格式在大多數(shù)下表現(xiàn)良好,但是也可以使用 SimpleDateFormat 自己的格式。使用 SimpleDateFormat 非常簡(jiǎn)單

·
使用一個(gè)格式模式字符串(和一個(gè)區(qū),如果希望的來(lái)實(shí)例化 SimpleDateFormat
 
·
使用 Date 在其上調(diào) format()
 
結(jié)果是一個(gè)格式化了的日期字符串。以下是一個(gè)例子:

Date aDate = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");
String formattedDate = formatter.format(today);
System.out.println(formattedDate);

運(yùn)碼時(shí)將獲得以下結(jié)果(當(dāng)然,它將響運(yùn)行代碼時(shí)當(dāng)前日期):

11/05/2005
在上述例子中,用引號(hào)括起來(lái)的字符串遵循了日期格式化模式的模式語(yǔ)規(guī)則Java.sun.com 中有一些那些規(guī)則的很好括(請(qǐng)參閱 料)。以下是一些有用的經(jīng)驗(yàn)可以指定日期和時(shí)間的模式。

·
一些模式語(yǔ)不是由直覺(jué)得到的(例如,mm 了一個(gè)兩數(shù)的分模式;要簡(jiǎn)寫(xiě)的月,可以使用 MM)。

·
過(guò)將文本文字放入號(hào)中可以在模式中包含



久久不醉