public class GregorianCalendar
extends Calendar
| java.lang.Object | ||
| android.icu.util.Calendar | ||
| android.icu.util.GregorianCalendar | ||
| |
[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 |
|---|
android.icu.util.Calendar
|
Fields |
|
|---|---|
protected boolean |
invertGregorian 由handleComputeJulianDay()和handleComputeMonthStart()使用。 |
protected boolean |
isGregorian 由handleComputeJulianDay()和handleComputeMonthStart()使用。 |
Inherited fields |
|---|
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) |
|
|---|---|
android.icu.util.Calendar
|
|
java.lang.Object
|
|
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 |
|