Most visited

Recently visited

Added in API level 24

GregorianCalendar

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()MONDAYgetMinimalDaysInFirstWeek()是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()SUNDAYgetMinimalDaysInFirstWeek()是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"

也可以看看:

Summary

Constants

int AD

ERA字段的值表示共同时代(Anno Domini),也被称为CE。

int BC

ERA字段的值表示共同时代之前(基督之前)的时期,也被称为BCE。

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,默认的区域设置为 FORMAT

GregorianCalendar(TimeZone zone)

根据给定时区中的当前时间构造GregorianCalendar,并使用默认的 FORMAT语言环境。

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)

在缺省时区中使用默认的 FORMAT语言环境设置的给定日期构造GregorianCalendar。

GregorianCalendar(int year, int month, int date, int hour, int minute)

使用默认的 FORMAT区域设置为默认时区设置的给定日期和时间构造GregorianCalendar。

GregorianCalendar(int year, int month, int date, int hour, int minute, int second)

使用默认的 FORMAT区域设置为默认时区设置的给定日期和时间构造GregorianCalendar。

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

Constants

AD

Added in API level 24
int AD

ERA字段的值表示共同时代(Anno Domini),也被称为CE。 BCAD的过渡年AD是...,2 BC,1 BC,1 AD,2 AD,...

也可以看看:

常数值:1(0x00000001)

BC

Added in API level 24
int BC

ERA字段的值表示共同时代之前(基督之前)的时期,也被称为BCE。 BCAD的过渡年AD是...,2 BC,1 BC,1 AD,2 AD,...

也可以看看:

常量值:0(0x00000000)

Fields

invertGregorian

Added in API level 24
boolean invertGregorian

由handleComputeJulianDay()和handleComputeMonthStart()使用。

isGregorian

Added in API level 24
boolean isGregorian

由handleComputeJulianDay()和handleComputeMonthStart()使用。

Public constructors

GregorianCalendar

Added in API level 24
GregorianCalendar ()

使用默认时区中的当前时间构建默认的GregorianCalendar,并使用默认的 FORMAT区域设置。

也可以看看:

GregorianCalendar

Added in API level 24
GregorianCalendar (TimeZone zone)

根据给定时区中的当前时间构建一个GregorianCalendar,并使用默认的 FORMAT语言环境。

Parameters
zone TimeZone: the given time zone.

也可以看看:

GregorianCalendar

Added in API level 24
GregorianCalendar (Locale aLocale)

根据给定语言环境的默认时区中的当前时间构造GregorianCalendar。

Parameters
aLocale Locale: the given locale.

GregorianCalendar

Added in API level 24
GregorianCalendar (ULocale locale)

[icu]根据给定语言环境的默认时区中的当前时间构造GregorianCalendar。

Parameters
locale ULocale: the given ulocale.

GregorianCalendar

Added in API level 24
GregorianCalendar (TimeZone zone, 
                Locale aLocale)

[icu]根据给定语言环境给定时区中的当前时间构造GregorianCalendar。

Parameters
zone TimeZone: the given time zone.
aLocale Locale: the given locale.

GregorianCalendar

Added in API level 24
GregorianCalendar (TimeZone zone, 
                ULocale locale)

根据给定语言环境给定时区中的当前时间构造GregorianCalendar。

Parameters
zone TimeZone: the given time zone.
locale ULocale: the given ulocale.

GregorianCalendar

Added in API level 24
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

Added in API level 24
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

Added in API level 24
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.

也可以看看:

Public methods

getActualMaximum

Added in API level 24
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

getActualMinimum

Added in API level 24
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

getGregorianChange

Added in API level 24
Date getGregorianChange ()

获取公历日历更改日期。 这是从朱利安日期切换到阳历日期的时刻。 默认是1582年10月15日。在此之前,日期将在Julian日历中。

Returns
Date the Gregorian cutover date for this calendar.

getType

Added in API level 24
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

hashCode

Added in API level 24
int hashCode ()

覆盖hashCode。 生成GregorianCalendar对象的哈希码

Returns
int a hash code value for this object.

isEquivalentTo

Added in API level 24
boolean isEquivalentTo (Calendar other)

如果给定的Calendar对象与此对象相等,则返回true。 日历覆盖。

Parameters
other Calendar: the Calendar to be compared with this Calendar
Returns
boolean

isLeapYear

Added in API level 24
boolean isLeapYear (int year)

确定给定年份是否为闰年。 如果给定的年份是闰年,则返回true。

Parameters
year int: the given year.
Returns
boolean true if the given year is a leap year; false otherwise.

roll

Added in API level 24
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.

setGregorianChange

Added in API level 24
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.

Protected methods

handleComputeFields

Added in API level 24
void handleComputeFields (int julianDay)

重写日历以计算特定于混合公历 - 儒略历日历系统的几个字段。 这些是:

  • ERA
  • YEAR
  • MONTH
  • DAY_OF_MONTH
  • DAY_OF_YEAR
  • EXTENDED_YEAR

Parameters
julianDay int

handleComputeJulianDay

Added in API level 24
int handleComputeJulianDay (int bestField)

子类可以覆盖这个。 此方法调用handleGetMonthLength()以获取日历特定的月份长度。

Parameters
bestField int
Returns
int

handleComputeMonthStart

Added in API level 24
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

handleGetExtendedYear

Added in API level 24
int handleGetExtendedYear ()

返回当前字段定义的扩展年份。 这将使用EXTENDED_YEAR字段或特定于日历系统的YEAR和超年字段(如ERA),具体取决于哪一组字段较新。

Returns
int the extended year

handleGetLimit

Added in API level 24
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

handleGetMonthLength

Added in API level 24
int handleGetMonthLength (int extendedYear, 
                int month)

返回此日历系统给定扩展年的给定月份中的天数。 如果子类可以提供比日历中的默认实现更正确或更高效的实现,则子类应该重写此方法。

Parameters
extendedYear int
month int
Returns
int

handleGetYearLength

Added in API level 24
int handleGetYearLength (int eyear)

返回此日历系统的给定扩展年份中的天数。 如果子类可以提供比日历中的默认实现更正确或更高效的实现,则子类应该重写此方法。

Parameters
eyear int
Returns
int

Hooray!