public class GregorianCalendarextends CalendarGregorianCalendar 是 Calendar 的一個具體子類,提供了世界上大多數國家使用的標準日歷系統。
GregorianCalendar 是一種混合日歷,在單一間斷性的支持下同時支持儒略歷和格里高利歷系統,在默認情況下,它對應格里高利日歷創立時的格里高利歷日期(某些國家是在 1582 年 10 月 15 日創立,在其他國家要晚一些)。可由調用方通過調用 setGregorianChange() 來更改起始日期。
歷史上,在那些首先采用格里高利歷的國家中,1582 年 10 月 4 日(儒略歷)之后就是 1582 年 10 月 15 日(格里高利歷)。此日歷正確地模擬了這些變化。在開始格里高利歷之前,GregorianCalendar 實現的是儒略歷。格里高利歷和儒略歷之間的惟一區別就是閏年規則。儒略歷指定每 4 年就為閏年,而格里高利歷則忽略不能被 400 整除的世紀年。
GregorianCalendar 可實現預期的 格里高利歷和儒略歷。也就是說,可以通過在時間上無限地向后或向前外推當前規則來計算日期。因此,對于所有的年份,都可以使用 GregorianCalendar 來生成有意義并且一致的結果。但是,采用現代儒略歷規則時,使用 GregorianCalendar 得到的日期只在歷史上從公元 4 年 3 月 1 日之后是準確的。在此日期之前,閏年規則的應用沒有規則性,在 45 BC 之前,甚至不存在儒略歷。
在格里高利歷創立以前,新年是 3 月 25 日。為了避免混淆,此日歷始終使用 1 月 1 日為新年。如果想要格里高利歷轉換之前并且處于 1 月 1 日和 3 月 24 日之間的日期,則可以進行手動調整。
為 WEEK_OF_YEAR 字段所計算的值的范圍從 1 到 53。一年的第一個星期始于 getFirstDayOfWeek() 的最早 7 天,至少包含該年的 getMinimalDaysInFirstWeek() 各天。這取決于 getMinimalDaysInFirstWeek()、getFirstDayOfWeek() 的值以及 1 月 1 日是星期幾。一年的第一個星期和下一年的第一個星期之間的各個星期按順序從 2 到 52 或 53(根據需要)進行編號。
例如,1998 年 1 月 1 日是星期四。如果 getFirstDayOfWeek() 為 MONDAY,并且 getMinimalDaysInFirstWeek() 為 4(這些值反映了 ISO 8601 和很多國家標準),則 1998 年的第一個星期開始于 1997 年 12 月 29 日,結束于 1998 年 1 月 4 日。但是,如果 getFirstDayOfWeek() 為 SUNDAY,那么 1998 年的第一個星期開始于 1998 年 1 月 4 日,結束于 1998 年 1 月 10 日;1998 年頭三天是 1997 年第 53 個星期的一部分。
為 WEEK_OF_MONTH 字段所計算的值的范圍從 0 到 6。一個月的第一個星期(WEEK_OF_MONTH = 1 的日期)是該月至少連續 getMinimalDaysInFirstWeek() 天中的最早日期,結束于 getFirstDayOfWeek() 的前一天。與一年的第一個星期不同,一個月的第一個星期可能短于 7 天,也不必從 getFirstDayOfWeek() 這一天開始,并且不包括前一個月的日期。在第一個星期之前該月日期的 WEEK_OF_MONTH 為 0。
例如,如果 getFirstDayOfWeek() 為 SUNDAY,getMinimalDaysInFirstWeek() 為 4,那么 1998 年 1 月的第一個星期是從 1 月 4 日星期日到 1 月 10 日星期六。這些天的 WEEK_OF_MONTH 為 1。1 月 1 日星期四到 1 月 3 日星期六的 WEEK_OF_MONTH 為 0。如果 getMinimalDaysInFirstWeek() 變為 3,則 1 月 1 日到 1 月 3 日的 WEEK_OF_MONTH 為 1。
clear 方法將日歷字段設置為未定義。GregorianCalendar 為每個日歷字段使用以下默認值(如果該值未定義)。 字段
默認值