public class GregorianCalendar
extends Calendar
java.lang.Object | ||
↳ | android.icu.util.Calendar | |
↳ | android.icu.util.GregorianCalendar |
Known Direct Subclasses |
[icu增强] ICU的替代GregorianCalendar
。 ICU特有的方法,字段和其他功能标记为“ [icu] ”。
GregorianCalendar
是的具体子 Calendar
,并提供了世界上大多数国家使用的标准日历。
标准(格里高利)日历有2个时代,BC和AD。
这个实现处理单个不连续性,默认情况下对应于公历日期(1582年10月15日在某些国家,后来在其他国家)。 调用者可以通过调用setGregorianChange()
来更改转换日期。
从历史上看,在那些首先采用公历的国家,1582年10月4日之后是1582年10月15日。这个日历正确地模拟了这一点。 在公历转换之前, GregorianCalendar
实现了儒略历。 格里历和儒略历之间的唯一区别是闰年规则。 朱利安历法规定了每四年的闰年,而公历年则忽略了不能被400整除的世纪年。
GregorianCalendar
实现proleptic格里高利历和罗马儒略历。 也就是说,日期的计算是通过将现有规则无限期地向前和向后推断。 因此,所有年份均可使用GregorianCalendar
来产生有意义且一致的结果。 然而,使用GregorianCalendar
获得的日期GregorianCalendar
是准确的,只有从公元4年3月1日开始,现代儒略日历规则才被采用。 在此之前,闰年规则不规则地适用,并且在公元前45年之前,朱利安日历甚至不存在。
在公历之前,元旦是3月25日。为避免混淆,该日历始终使用1月1日。如果需要,格里高利转换之前的日期和1月1日和3月24日。
为WEEK_OF_YEAR
字段计算的值范围为1到53.第1周是从getFirstDayOfWeek()
开始的最早的七天期间,其中包含至少getMinimalDaysInFirstWeek()
天的该年。 因而它取决于的值getMinimalDaysInFirstWeek()
, getFirstDayOfWeek()
,和1月1日周的周中的一个年的1周和周次年1按顺序编号从2到52或53(如需要)之间的那一天。
例如,1998年1月1日是星期四。 如果getFirstDayOfWeek()
是MONDAY
和getMinimalDaysInFirstWeek()
是4(这些是反映ISO 8601和许多国家标准的值),那么1998年的第1周从1997年12月29日开始,到1998年1月4日结束。但是,如果getFirstDayOfWeek()
是SUNDAY
,那么1998年第1周从1998年1月4日开始,到1998年1月10日结束; 1998年的前三天是1997年第53周的一部分。
为WEEK_OF_MONTH
字段范围计算的值范围从0或1到4或5.一个月的第1周(具有WEEK_OF_MONTH = 1
)是最早的一组,该月的至少getMinimalDaysInFirstWeek()
个连续日期,在getFirstDayOfWeek()
前一天结束。 与一年的第1周不同,一个月的第1周可能短于7天,不需要从getFirstDayOfWeek()
开始,并且不包括上个月的天数。 第1周前一个月的天数为WEEK_OF_MONTH
。
例如,如果 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。
例:
// get the supported ids for GMT-08:00 (Pacific Standard Time) String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000); // if no ids were returned, something is wrong. get out. if (ids.length == 0) System.exit(0); // begin output System.out.println("Current Time"); // create a Pacific Standard Time time zone SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]); // set up rules for daylight savings time pdt.setStartRule(Calendar.MARCH, 2, Calendar.SUNDAY, 2 * 60 * 60 * 1000); pdt.setEndRule(Calendar.NOVEMBER, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000); // create a GregorianCalendar with the Pacific Daylight time zone // and the current date and time Calendar calendar = new GregorianCalendar(pdt); Date trialTime = new Date(); calendar.setTime(trialTime); // print out a bunch of interesting things System.out.println("ERA: " + calendar.get(Calendar.ERA)); System.out.println("YEAR: " + calendar.get(Calendar.YEAR)); System.out.println("MONTH: " + calendar.get(Calendar.MONTH)); System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR)); System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH)); System.out.println("DATE: " + calendar.get(Calendar.DATE)); System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH)); System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR)); System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK)); System.out.println("DAY_OF_WEEK_IN_MONTH: " + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH)); System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM)); System.out.println("HOUR: " + calendar.get(Calendar.HOUR)); System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY)); System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE)); System.out.println("SECOND: " + calendar.get(Calendar.SECOND)); System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND)); System.out.println("ZONE_OFFSET: " + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000))); System.out.println("DST_OFFSET: " + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000))); System.out.println("Current Time, with hour reset to 3"); calendar.clear(Calendar.HOUR_OF_DAY); // so doesn't override calendar.set(Calendar.HOUR, 3); System.out.println("ERA: " + calendar.get(Calendar.ERA)); System.out.println("YEAR: " + calendar.get(Calendar.YEAR)); System.out.println("MONTH: " + calendar.get(Calendar.MONTH)); System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR)); System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH)); System.out.println("DATE: " + calendar.get(Calendar.DATE)); System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH)); System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR)); System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK)); System.out.println("DAY_OF_WEEK_IN_MONTH: " + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH)); System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM)); System.out.println("HOUR: " + calendar.get(Calendar.HOUR)); System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY)); System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE)); System.out.println("SECOND: " + calendar.get(Calendar.SECOND)); System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND)); System.out.println("ZONE_OFFSET: " + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000))); // in hours System.out.println("DST_OFFSET: " + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000))); // in hours
通常应使用 getInstance(ULocale)
传递 ULocale
与标记 "@calendar=gregorian"
来实例化 "@calendar=gregorian"
。
Constants |
|
---|---|
int |
AD
|
int |
BC
|
Inherited constants |
---|
From class android.icu.util.Calendar
|
Fields |
|
---|---|
protected boolean |
invertGregorian 由handleComputeJulianDay()和handleComputeMonthStart()使用。 |
protected boolean |
isGregorian 由handleComputeJulianDay()和handleComputeMonthStart()使用。 |
Inherited fields |
---|
From class android.icu.util.Calendar
|
Public constructors |
|
---|---|
GregorianCalendar() 使用默认时区中的当前时间构造默认的GregorianCalendar,默认的区域设置为 |
|
GregorianCalendar(TimeZone zone) 根据给定时区中的当前时间构造GregorianCalendar,并使用默认的 |
|
GregorianCalendar(Locale aLocale) 根据给定语言环境的默认时区中的当前时间构造GregorianCalendar。 |
|
GregorianCalendar(ULocale locale) [icu]根据给定语言环境的默认时区中的当前时间构造GregorianCalendar。 |
|
GregorianCalendar(TimeZone zone, Locale aLocale) [icu]根据给定语言环境给定时区中的当前时间构造GregorianCalendar。 |
|
GregorianCalendar(TimeZone zone, ULocale locale) 根据给定语言环境给定时区中的当前时间构造GregorianCalendar。 |
|
GregorianCalendar(int year, int month, int date) 在缺省时区中使用默认的 |
|
GregorianCalendar(int year, int month, int date, int hour, int minute) 使用默认的 |
|
GregorianCalendar(int year, int month, int date, int hour, int minute, int second) 使用默认的 |
Public methods |
|
---|---|
int |
getActualMaximum(int field) 给定当前日期,返回此字段可能具有的最大值。 |
int |
getActualMinimum(int field) 给定当前日期,返回此字段可能具有的最小值。 |
final Date |
getGregorianChange() 获取公历日历更改日期。 |
String |
getType() [icu]返回此Calendar对象的日历类型名称字符串。 |
int |
hashCode() 覆盖hashCode。 |
boolean |
isEquivalentTo(Calendar other) 如果给定的Calendar对象与此对象相等,则返回true。 |
boolean |
isLeapYear(int year) 确定给定年份是否为闰年。 |
void |
roll(int field, int amount) 滚动字段的签名数量。 |
void |
setGregorianChange(Date date) 设置GregorianCalendar更改日期。 |
Protected methods |
|
---|---|
void |
handleComputeFields(int julianDay) 重写日历以计算特定于混合公历 - 儒略历日历系统的几个字段。 |
int |
handleComputeJulianDay(int bestField) 子类可以覆盖这个。 |
int |
handleComputeMonthStart(int eyear, int month, boolean useMonth) 返回给定月/年开始的JD |
int |
handleGetExtendedYear() 返回当前字段定义的扩展年份。 |
int |
handleGetLimit(int field, int limitType) 用于定义不同类型限制的子类API。 |
int |
handleGetMonthLength(int extendedYear, int month) 返回此日历系统给定扩展年的给定月份中的天数。 |
int |
handleGetYearLength(int eyear) 返回此日历系统的给定扩展年份中的天数。 |
Inherited methods |
|
---|---|
From class android.icu.util.Calendar
|
|
From class java.lang.Object
|
|
From interface java.lang.Comparable
|
int AD
ERA
字段的值表示共同时代(Anno Domini),也被称为CE。 从BC
到AD
的过渡年AD
是...,2 BC,1 BC,1 AD,2 AD,...
也可以看看:
常数值:1(0x00000001)
int BC
ERA
字段的值表示共同时代之前(基督之前)的时期,也被称为BCE。 从BC
到AD
的过渡年AD
是...,2 BC,1 BC,1 AD,2 AD,...
也可以看看:
常量值:0(0x00000000)
boolean invertGregorian
由handleComputeJulianDay()和handleComputeMonthStart()使用。
boolean isGregorian
由handleComputeJulianDay()和handleComputeMonthStart()使用。
GregorianCalendar ()
使用默认时区中的当前时间构建默认的GregorianCalendar,并使用默认的 FORMAT
区域设置。
也可以看看:
GregorianCalendar (TimeZone zone)
根据给定时区中的当前时间构建一个GregorianCalendar,并使用默认的 FORMAT
语言环境。
Parameters | |
---|---|
zone |
TimeZone : the given time zone. |
也可以看看:
GregorianCalendar (Locale aLocale)
根据给定语言环境的默认时区中的当前时间构造GregorianCalendar。
Parameters | |
---|---|
aLocale |
Locale : the given locale. |
GregorianCalendar (ULocale locale)
[icu]根据给定语言环境的默认时区中的当前时间构造GregorianCalendar。
Parameters | |
---|---|
locale |
ULocale : the given ulocale. |
GregorianCalendar (TimeZone zone, Locale aLocale)
[icu]根据给定语言环境给定时区中的当前时间构造GregorianCalendar。
Parameters | |
---|---|
zone |
TimeZone : the given time zone. |
aLocale |
Locale : the given locale. |
GregorianCalendar (TimeZone zone, ULocale locale)
根据给定语言环境给定时区中的当前时间构造GregorianCalendar。
Parameters | |
---|---|
zone |
TimeZone : the given time zone. |
locale |
ULocale : the given ulocale. |
GregorianCalendar (int year, int month, int date)
使用默认时区中设置的给定日期构造GregorianCalendar,默认时区为 FORMAT
区域设置。
Parameters | |
---|---|
year |
int : the value used to set the YEAR time field in the calendar. |
month |
int : the value used to set the MONTH time field in the calendar. Month value is 0-based. e.g., 0 for January. |
date |
int : the value used to set the DATE time field in the calendar. |
也可以看看:
GregorianCalendar (int year, int month, int date, int hour, int minute)
使用默认的 FORMAT
区域设置为默认时区设置的给定日期和时间构造GregorianCalendar。
Parameters | |
---|---|
year |
int : the value used to set the YEAR time field in the calendar. |
month |
int : the value used to set the MONTH time field in the calendar. Month value is 0-based. e.g., 0 for January. |
date |
int : the value used to set the DATE time field in the calendar. |
hour |
int : the value used to set the HOUR_OF_DAY time field in the calendar. |
minute |
int : the value used to set the MINUTE time field in the calendar. |
也可以看看:
GregorianCalendar (int year, int month, int date, int hour, int minute, int second)
使用默认的 FORMAT
区域设置为默认时区设置的给定日期和时间构造GregorianCalendar。
Parameters | |
---|---|
year |
int : the value used to set the YEAR time field in the calendar. |
month |
int : the value used to set the MONTH time field in the calendar. Month value is 0-based. e.g., 0 for January. |
date |
int : the value used to set the DATE time field in the calendar. |
hour |
int : the value used to set the HOUR_OF_DAY time field in the calendar. |
minute |
int : the value used to set the MINUTE time field in the calendar. |
second |
int : the value used to set the SECOND time field in the calendar. |
也可以看看:
int getActualMaximum (int field)
给定当前日期,返回此字段可能具有的最大值。 例如,在日期“1997年2月3日”和DAY_OF_MONTH字段中,实际最大值为28; 对于“1996年2月3日”,它是29.同样对于希伯来语日历,几年来,MONTH的实际最大值是12,对于其他13。
Parameters | |
---|---|
field |
int : the field whose maximum is desired |
Returns | |
---|---|
int |
the maximum of the given field for the current date of this calendar |
int getActualMinimum (int field)
给定当前日期,返回此字段可能具有的最小值。 对于公历,这与getMinimum()和getGreatestMinimum()相同。
Parameters | |
---|---|
field |
int : the field whose actual minimum value is desired. |
Returns | |
---|---|
int |
the minimum of the given field for the current date of this calendar |
Date getGregorianChange ()
获取公历日历更改日期。 这是从朱利安日期切换到阳历日期的时刻。 默认是1582年10月15日。在此之前,日期将在Julian日历中。
Returns | |
---|---|
Date |
the Gregorian cutover date for this calendar. |
String getType ()
[icu]返回此Calendar对象的日历类型名称字符串。 返回的字符串是传统的ICU日历属性值,例如“gregorian”或“japanese”。
请参阅http://www.unicode.org/reports/tr35/#Key_Type_Definitions中有关语言环境ID的日历属性的type =“old type name”
Returns | |
---|---|
String |
legacy calendar type name string |
int hashCode ()
覆盖hashCode。 生成GregorianCalendar对象的哈希码
Returns | |
---|---|
int |
a hash code value for this object. |
boolean isEquivalentTo (Calendar other)
如果给定的Calendar对象与此对象相等,则返回true。 日历覆盖。
Parameters | |
---|---|
other |
Calendar : the Calendar to be compared with this Calendar |
Returns | |
---|---|
boolean |
boolean isLeapYear (int year)
确定给定年份是否为闰年。 如果给定的年份是闰年,则返回true。
Parameters | |
---|---|
year |
int : the given year. |
Returns | |
---|---|
boolean |
true if the given year is a leap year; false otherwise. |
void roll (int field, int amount)
滚动字段的签名数量。
Parameters | |
---|---|
field |
int : the calendar field to roll. |
amount |
int : the amount by which the field should be rolled. |
void setGregorianChange (Date date)
设置GregorianCalendar更改日期。 这是从朱利安日期切换到阳历日期的时刻。 默认是1582年10月15日。在此之前,日期将在Julian日历中。
要获取纯朱利安日历,请将更改日期设置为Date(Long.MAX_VALUE)
。 要获取纯公历日历,请将更改日期设置为Date(Long.MIN_VALUE)
。
Parameters | |
---|---|
date |
Date : the given Gregorian cutover date. |
void handleComputeFields (int julianDay)
重写日历以计算特定于混合公历 - 儒略历日历系统的几个字段。 这些是:
Parameters | |
---|---|
julianDay |
int
|
int handleComputeJulianDay (int bestField)
子类可以覆盖这个。 此方法调用handleGetMonthLength()以获取日历特定的月份长度。
Parameters | |
---|---|
bestField |
int
|
Returns | |
---|---|
int |
int handleComputeMonthStart (int eyear, int month, boolean useMonth)
返回给定月/年开始的JD
Parameters | |
---|---|
eyear |
int : the extended year |
month |
int : the zero-based month, or 0 if useMonth is false |
useMonth |
boolean : if false, compute the day before the first day of the given year, otherwise, compute the day before the first day of the given month |
Returns | |
---|---|
int |
the Julian day number of the day before the first day of the given month and year |
int handleGetExtendedYear ()
返回当前字段定义的扩展年份。 这将使用EXTENDED_YEAR字段或特定于日历系统的YEAR和超年字段(如ERA),具体取决于哪一组字段较新。
Returns | |
---|---|
int |
the extended year |
int handleGetLimit (int field, int limitType)
用于定义不同类型限制的子类API。 子类必须实现此方法才能返回以下字段的限制:
ERA YEAR MONTH WEEK_OF_YEAR WEEK_OF_MONTH DAY_OF_MONTH DAY_OF_YEAR DAY_OF_WEEK_IN_MONTH YEAR_WOY EXTENDED_YEAR
Parameters | |
---|---|
field |
int : one of the above field numbers |
limitType |
int : one of MINIMUM , GREATEST_MINIMUM , LEAST_MAXIMUM , or MAXIMUM |
Returns | |
---|---|
int |
int handleGetMonthLength (int extendedYear, int month)
返回此日历系统给定扩展年的给定月份中的天数。 如果子类可以提供比日历中的默认实现更正确或更高效的实现,则子类应该重写此方法。
Parameters | |
---|---|
extendedYear |
int
|
month |
int
|
Returns | |
---|---|
int |
int handleGetYearLength (int eyear)
返回此日历系统的给定扩展年份中的天数。 如果子类可以提供比日历中的默认实现更正确或更高效的实现,则子类应该重写此方法。
Parameters | |
---|---|
eyear |
int
|
Returns | |
---|---|
int |