Java中處理日期的類主要有Date、Calendar和DateFormat三個(gè),在JDK中它們對(duì)應(yīng)的包的位置和相關(guān)的派生類如下所示:?
1、?Date:具體類java.util.Date?;?
2、?Calendar:抽象類java.text.DateFormat,它派生的一個(gè)子類為java.text.SimpleDateFormat?
3、?DateFormat:抽象類java.util.Calendar,它派生的一個(gè)子類為java.util.GregorianCalendar?
(注:如果有朋友對(duì)具體類和抽象類不了解,可以參考相關(guān)Java資料)?
現(xiàn)在對(duì)以上三個(gè)類進(jìn)行如下分析:?
一、對(duì)Date類的分析?
Date?類從JDK?1.0開(kāi)始進(jìn)化,?當(dāng)時(shí)它只包含了幾個(gè)簡(jiǎn)單的處理日期數(shù)據(jù)的方法。?由于這些方法實(shí)用性差,現(xiàn)在基本上被Calendar類中各方法所代替了。這種改進(jìn)目的是為了更好的處理日期數(shù)據(jù)國(guó)際化格式。?Date?類實(shí)際上只是一個(gè)包裹類,?它包含一個(gè)長(zhǎng)整型數(shù)據(jù),?表示的是從GMT(格林尼治標(biāo)準(zhǔn)時(shí)間)1970年,?1?月?1日00:00:00這一刻之前或者是之后經(jīng)歷的毫秒數(shù).?
為了加深對(duì)Date類的理解,列舉如下一個(gè)簡(jiǎn)單例子來(lái)說(shuō)明Date的使用:?
import?java.util.Date;?
public?class?DateTest1?{?
public?static?void?main(String[]?args)?{?
/**?Get?the?system?Date?**/?
Date?date?=?new?Date();?
System.out.println(date.getTime());?
}?
}?
系統(tǒng)輸出如下結(jié)果:?
1001803809710?
在這個(gè)例子中,值得我們注意的是我們使用了Date?構(gòu)造函數(shù)創(chuàng)建一個(gè)日期對(duì)象,?在沒(méi)有任何參數(shù)的情況下,這個(gè)構(gòu)造函數(shù)會(huì)自動(dòng)調(diào)用System.currentTimeMillis()?方法來(lái)獲取當(dāng)前系統(tǒng)日期.。?
二、對(duì)DateFormat類的分析?
如果我們希望定制日期數(shù)據(jù)的格式,?比如顯示的日期格式為:2006年06月23日,抽象類java.util.Calendar和它的子類java.util.GregorianCalendar能完成這一功能。?
下面的例子展示了如何完成這個(gè)工作:?
import?java.util.SimpleDateFormat;?
import?java.util.Date;?
public?class?DateTest2?{?
public?static?void?main(String[]?args)?{?
SimpleDateFormat?format?=?new?SimpleDateFormat("yyyy年MM月dd日",Locale.US);?
Date?date?=?new?Date();?
System.out.println(bartDateFormat.format(date));?
}?
}?
只要通過(guò)向SimpleDateFormat?的構(gòu)造函數(shù)傳遞格式字符串"?yyyy年MM月dd日",?我們就可以指明自己想要的格式.?其中yyyy是年,MM是月,?dd是日.?字符的個(gè)數(shù)決定了日期是如何格式化的,如果格式為"yyyy年MM月dd日"就會(huì)顯示?06年06月23日;如果是"yy-MM-dd"就顯示06-06-23。?
三、對(duì)Calendar?類的分析?
如果想設(shè)置、獲取、操縱一個(gè)日期對(duì)象的各個(gè)特定部分,比如獲得小時(shí),?日,?分鐘、計(jì)算一個(gè)月的某一天說(shuō)星期幾等等。這樣的情況就需要抽象類java.util.Calendar和它的子類來(lái)處理。為了能清楚地說(shuō)明問(wèn)題,列舉下面的例子,?它的功能是計(jì)算第十個(gè)星期五是13號(hào).?
import?java.util.GregorianCalendar;?
import?java.util.Date;?
import?java.text.DateFormat;?
public?class?CalendarTest{?
public?static?void?main(String[]?args)?{?
DateFormat?dateFormat?=?DateFormat.getDateInstance(DateFormat.FULL);?
GregorianCalendar?cal?=?new?GregorianCalendar();?
/**?Set?the?date?and?time?of?our?calendar?to?the?system&s?date?and?time?**/?
cal.setTime(new?Date());?
System.out.println("System?Date:?"?+?dateFormat.format(cal.getTime()));?
/**?Set?the?day?of?week?to?FRIDAY?**/?
cal.set(GregorianCalendar.DAY_OF_WEEK,?GregorianCalendar.FRIDAY);?
System.out.println("After?Setting?Day?of?Week?to?Friday:?"?+?
dateFormat.format(cal.getTime()));?
int?friday13Counter?=?0;?
while?(friday13Counter?<=?10)?{?
/**?Go?to?the?next?Friday?by?adding?7?days.?**/?
cal.add(GregorianCalendar.DAY_OF_MONTH,?7);?
/**?If?the?day?of?month?is?13?we?have?another?Friday?the?13th.?**/?
if?(cal.get(GregorianCalendar.DAY_OF_MONTH)?==?13)?{?
friday13Counter++;?
System.out.println(dateFormat.format(cal.getTime()));?
}?
}?
}?
}?
輸出結(jié)果是:?
System?Date:?Saturday,?September?29,?2005?
四、總結(jié)?
在Java通過(guò)一下三個(gè)類的使用,一般可以滿足各種形式的日期使用。實(shí)際上,Java中日期使用的方法還有很多,如果有興趣的朋友請(qǐng)參考JDK幫助手冊(cè)。?
http://www.javaresearch.org/article/55424.htm
1、?Date:具體類java.util.Date?;?
2、?Calendar:抽象類java.text.DateFormat,它派生的一個(gè)子類為java.text.SimpleDateFormat?
3、?DateFormat:抽象類java.util.Calendar,它派生的一個(gè)子類為java.util.GregorianCalendar?
(注:如果有朋友對(duì)具體類和抽象類不了解,可以參考相關(guān)Java資料)?
現(xiàn)在對(duì)以上三個(gè)類進(jìn)行如下分析:?
一、對(duì)Date類的分析?
Date?類從JDK?1.0開(kāi)始進(jìn)化,?當(dāng)時(shí)它只包含了幾個(gè)簡(jiǎn)單的處理日期數(shù)據(jù)的方法。?由于這些方法實(shí)用性差,現(xiàn)在基本上被Calendar類中各方法所代替了。這種改進(jìn)目的是為了更好的處理日期數(shù)據(jù)國(guó)際化格式。?Date?類實(shí)際上只是一個(gè)包裹類,?它包含一個(gè)長(zhǎng)整型數(shù)據(jù),?表示的是從GMT(格林尼治標(biāo)準(zhǔn)時(shí)間)1970年,?1?月?1日00:00:00這一刻之前或者是之后經(jīng)歷的毫秒數(shù).?
為了加深對(duì)Date類的理解,列舉如下一個(gè)簡(jiǎn)單例子來(lái)說(shuō)明Date的使用:?
import?java.util.Date;?
public?class?DateTest1?{?
public?static?void?main(String[]?args)?{?
/**?Get?the?system?Date?**/?
Date?date?=?new?Date();?
System.out.println(date.getTime());?
}?
}?
系統(tǒng)輸出如下結(jié)果:?
1001803809710?
在這個(gè)例子中,值得我們注意的是我們使用了Date?構(gòu)造函數(shù)創(chuàng)建一個(gè)日期對(duì)象,?在沒(méi)有任何參數(shù)的情況下,這個(gè)構(gòu)造函數(shù)會(huì)自動(dòng)調(diào)用System.currentTimeMillis()?方法來(lái)獲取當(dāng)前系統(tǒng)日期.。?
二、對(duì)DateFormat類的分析?
如果我們希望定制日期數(shù)據(jù)的格式,?比如顯示的日期格式為:2006年06月23日,抽象類java.util.Calendar和它的子類java.util.GregorianCalendar能完成這一功能。?
下面的例子展示了如何完成這個(gè)工作:?
import?java.util.SimpleDateFormat;?
import?java.util.Date;?
public?class?DateTest2?{?
public?static?void?main(String[]?args)?{?
SimpleDateFormat?format?=?new?SimpleDateFormat("yyyy年MM月dd日",Locale.US);?
Date?date?=?new?Date();?
System.out.println(bartDateFormat.format(date));?
}?
}?
只要通過(guò)向SimpleDateFormat?的構(gòu)造函數(shù)傳遞格式字符串"?yyyy年MM月dd日",?我們就可以指明自己想要的格式.?其中yyyy是年,MM是月,?dd是日.?字符的個(gè)數(shù)決定了日期是如何格式化的,如果格式為"yyyy年MM月dd日"就會(huì)顯示?06年06月23日;如果是"yy-MM-dd"就顯示06-06-23。?
三、對(duì)Calendar?類的分析?
如果想設(shè)置、獲取、操縱一個(gè)日期對(duì)象的各個(gè)特定部分,比如獲得小時(shí),?日,?分鐘、計(jì)算一個(gè)月的某一天說(shuō)星期幾等等。這樣的情況就需要抽象類java.util.Calendar和它的子類來(lái)處理。為了能清楚地說(shuō)明問(wèn)題,列舉下面的例子,?它的功能是計(jì)算第十個(gè)星期五是13號(hào).?
import?java.util.GregorianCalendar;?
import?java.util.Date;?
import?java.text.DateFormat;?
public?class?CalendarTest{?
public?static?void?main(String[]?args)?{?
DateFormat?dateFormat?=?DateFormat.getDateInstance(DateFormat.FULL);?
GregorianCalendar?cal?=?new?GregorianCalendar();?
/**?Set?the?date?and?time?of?our?calendar?to?the?system&s?date?and?time?**/?
cal.setTime(new?Date());?
System.out.println("System?Date:?"?+?dateFormat.format(cal.getTime()));?
/**?Set?the?day?of?week?to?FRIDAY?**/?
cal.set(GregorianCalendar.DAY_OF_WEEK,?GregorianCalendar.FRIDAY);?
System.out.println("After?Setting?Day?of?Week?to?Friday:?"?+?
dateFormat.format(cal.getTime()));?
int?friday13Counter?=?0;?
while?(friday13Counter?<=?10)?{?
/**?Go?to?the?next?Friday?by?adding?7?days.?**/?
cal.add(GregorianCalendar.DAY_OF_MONTH,?7);?
/**?If?the?day?of?month?is?13?we?have?another?Friday?the?13th.?**/?
if?(cal.get(GregorianCalendar.DAY_OF_MONTH)?==?13)?{?
friday13Counter++;?
System.out.println(dateFormat.format(cal.getTime()));?
}?
}?
}?
}?
輸出結(jié)果是:?
System?Date:?Saturday,?September?29,?2005?
四、總結(jié)?
在Java通過(guò)一下三個(gè)類的使用,一般可以滿足各種形式的日期使用。實(shí)際上,Java中日期使用的方法還有很多,如果有興趣的朋友請(qǐng)參考JDK幫助手冊(cè)。?
http://www.javaresearch.org/article/55424.htm