Most visited

Recently visited

Added in API level 1

GregorianCalendar

public class GregorianCalendar
extends Calendar

java.lang.Object
   ↳ java.util.Calendar
     ↳ java.util.GregorianCalendar


GregorianCalendar是的具体子 Calendar ,并提供了世界上大多数国家使用的标准日历系统。

GregorianCalendar是一种混合日历,支持Julian和Gregorian日历系统,并支持单一的不连续性,默认情况下,公历对应于公历(1582年10月15日在某些国家,后来在其他国家)。 调用者可以通过调用setGregorianChange()来更改转换日期。

从历史上看,在那些首先采用公历的国家,1582年10月4日(朱利安)于1582年10月15日(格里高利)之后。 这个日历正确地模拟这个。 在公历转换之前, GregorianCalendar执行Julian日历。 格里历和儒略历之间的唯一区别是闰年规则。 朱利安历法规定了每四年的闰年,而公历年则忽略了不能被400整除的世纪年。

GregorianCalendar实现proleptic格里高利历和罗马儒略历。 也就是说,日期的计算是通过将现有规则无限期地向前和向后推断。 因此,所有年份都可以使用GregorianCalendar来产生有意义且一致的结果。 然而,使用GregorianCalendar获得的日期GregorianCalendar是准确的,只有从公元4年3月1日开始,现代儒略日历规则才被采用。 在此之前,闰年规则不规则地适用,并且在公元前45年之前,朱利安日历甚至不存在。

在公历之前,元旦是3月25日。为避免混淆,该日历始终使用1月1日。如果需要,格里高利转换之前的日期和1月1日和3月24日。

Week Of Year and Week Year

为WEEK_OF_YEAR字段计算的值范围从1到53.日历年的第一周是从getFirstDayOfWeek()开始的最早的七天期间,其中包含至少getMinimalDaysInFirstWeek()天。 因而它取决于的值getMinimalDaysInFirstWeek() , getFirstDayOfWeek() ,和一周的一月的一年1周和下一年的1周(不包括)顺序地被编号为2至52或53(除了间1.周一天参与Julian-Gregorian过渡的年份)。

的getFirstDayOfWeek()个getMinimalDaysInFirstWeek()值构建在使用区域设置相关的资源初始化GregorianCalendar 。 The week determination is compatible与ISO 8601标准,当getFirstDayOfWeek()是MONDAY和getMinimalDaysInFirstWeek()是4时,这些值用于首选标准区域。 这些值可以通过调用setFirstDayOfWeek()和setMinimalDaysInFirstWeek()来明确设置。

A week year与WEEK_OF_YEAR周期同步。 第一周和最后一周(含)之间的所有星期具有相同的周年价值。 因此,一周的第一天和最后一天可能会有不同的日历年度值。

例如,1998年1月1日是星期四。 如果getFirstDayOfWeek()是MONDAY和getMinimalDaysInFirstWeek()是4(符合ISO 8601标准兼容设置),那么1998年第一周从1997年12月29日开始,到1998年1月4日结束。周年是1998年,为1997历年的最后三天。但是,如果getFirstDayOfWeek()是SUNDAY ,那么1998年第一周从1998年1月4日开始,到1998年1月10日结束; 1998年的前三天是1997年第53周的一部分,他们的周年是1997年。

Week Of Month

为WEEK_OF_MONTH字段计算的值范围为0到6.一个月的第1周(具有WEEK_OF_MONTH = 1 )是最早的一组,该月的至少getMinimalDaysInFirstWeek()个连续日,终止于getFirstDayOfWeek()前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 WEEK_OF_MONTH为0.如果 getMinimalDaysInFirstWeek()更改为3,则1月1日至1月3日的 WEEK_OF_MONTH为1。

Default Fields Values

clear方法设置未定义的日历字段。 GregorianCalendar如果其值未定义,则为每个日历字段使用以下默认值。

Field
Default Value
ERA
AD
YEAR
1970
MONTH
JANUARY
DAY_OF_MONTH
1
DAY_OF_WEEK
the first day of week
WEEK_OF_MONTH
0
DAY_OF_WEEK_IN_MONTH
1
AM_PM
AM
HOUR, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND
0

Default values are not applicable for the fields not listed above.

例:

 // 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 Saving Time
 pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
 pdt.setEndRule(Calendar.OCTOBER, -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
 

也可以看看:

Summary

Constants

int AD

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

int BC

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

Inherited constants

From class java.util.Calendar

Inherited fields

From class java.util.Calendar

Public constructors

GregorianCalendar()

使用缺省语言环境的默认时区中的当前时间构造默认 GregorianCalendar 。

GregorianCalendar(TimeZone zone)

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

GregorianCalendar(Locale aLocale)

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

GregorianCalendar(TimeZone zone, Locale aLocale)

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

GregorianCalendar(int year, int month, int dayOfMonth)

使用缺省区域设置在默认时区中设置的给定日期构造 GregorianCalendar 。

GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute)

使用默认语言环境为默认时区设置的给定日期和时间构造一个 GregorianCalendar 。

GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)

使用默认语言环境为默认时区设置的给定日期和时间构造GregorianCalendar。

Public methods

void add(int field, int amount)

根据日历的规则,将指定(签名)的时间量添加到给定的日历字段。

Object clone()

创建并返回此对象的副本。

boolean equals(Object obj)

将此 GregorianCalendar与指定的 Object 。

int getActualMaximum(int field)

返回此日历字段可能有,考虑到给定的时间值和的当前值中的最大值 getFirstDayOfWeek , getMinimalDaysInFirstWeek , getGregorianChange和 getTimeZone方法。

int getActualMinimum(int field)

返回此日历字段可能有,考虑到给定的时间值和的当前值的最小值 getFirstDayOfWeek , getMinimalDaysInFirstWeek , getGregorianChange和 getTimeZone方法。

int getGreatestMinimum(int field)

返回此 GregorianCalendar实例的给定日历字段的最高最小值。

final Date getGregorianChange()

获取公历日历更改日期。

int getLeastMaximum(int field)

返回此 GregorianCalendar实例的给定日历字段的最小最大值。

int getMaximum(int field)

返回此 GregorianCalendar实例的给定日历字段的 GregorianCalendar 。

int getMinimum(int field)

返回此 GregorianCalendar实例的给定日历字段的 GregorianCalendar 。

TimeZone getTimeZone()

获取时区。

int getWeekYear()

返回此 GregorianCalendar表示的 GregorianCalendar 。

int getWeeksInWeekYear()

返回周在数量 week year由这代表 GregorianCalendar 。

int hashCode()

为此 GregorianCalendar对象生成哈希码。

boolean isLeapYear(int year)

确定给定年份是否为闰年。

final boolean isWeekDateSupported()

退货 true表明此 GregorianCalendar支持周日期。

void roll(int field, boolean up)

在给定时间字段上添加或减去(上/下)单个时间单位而不改变更大的字段。

void roll(int field, int amount)

将已签名的金额添加到指定的日历字段,而不更改较大的字段。

void setGregorianChange(Date date)

设置更改日期 GregorianCalendar 。

void setTimeZone(TimeZone zone)

使用给定的时区值设置时区。

void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)

设置此 GregorianCalendar由日期符给出的日期- weekYear , weekOfYear ,并 dayOfWeek 。

Protected methods

void computeFields()

将时间值(毫秒偏移量从 Epoch )转换为日历字段值。

void computeTime()

将日历字段值转换为时间值(距离 Epoch的毫秒偏移量)。

Inherited methods

From class java.util.Calendar
From class java.lang.Object
From interface java.lang.Comparable

Constants

AD

Added in API level 1
int AD

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

也可以看看:

常数值:1(0x00000001)

BC

Added in API level 1
int BC

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

也可以看看:

常量值:0(0x00000000)

Public constructors

GregorianCalendar

Added in API level 1
GregorianCalendar ()

使用缺省语言环境的默认时区中的当前时间构造默认 GregorianCalendar 。

GregorianCalendar

Added in API level 1
GregorianCalendar (TimeZone zone)

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

Parameters
zone TimeZone: the given time zone.

GregorianCalendar

Added in API level 1
GregorianCalendar (Locale aLocale)

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

Parameters
aLocale Locale: the given locale.

GregorianCalendar

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

基于给定语言环境给定时区中的当前时间构造一个 GregorianCalendar 。

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

GregorianCalendar

Added in API level 1
GregorianCalendar (int year, 
                int month, 
                int dayOfMonth)

使用缺省区域设置在默认时区中设置的给定日期构造 GregorianCalendar 。

Parameters
year int: the value used to set the YEAR calendar field in the calendar.
month int: the value used to set the MONTH calendar field in the calendar. Month value is 0-based. e.g., 0 for January.
dayOfMonth int: the value used to set the DAY_OF_MONTH calendar field in the calendar.

GregorianCalendar

Added in API level 1
GregorianCalendar (int year, 
                int month, 
                int dayOfMonth, 
                int hourOfDay, 
                int minute)

使用默认语言环境为默认时区设置的给定日期和时间构造一个 GregorianCalendar 。

Parameters
year int: the value used to set the YEAR calendar field in the calendar.
month int: the value used to set the MONTH calendar field in the calendar. Month value is 0-based. e.g., 0 for January.
dayOfMonth int: the value used to set the DAY_OF_MONTH calendar field in the calendar.
hourOfDay int: the value used to set the HOUR_OF_DAY calendar field in the calendar.
minute int: the value used to set the MINUTE calendar field in the calendar.

GregorianCalendar

Added in API level 1
GregorianCalendar (int year, 
                int month, 
                int dayOfMonth, 
                int hourOfDay, 
                int minute, 
                int second)

使用默认语言环境为默认时区设置的给定日期和时间构造GregorianCalendar。

Parameters
year int: the value used to set the YEAR calendar field in the calendar.
month int: the value used to set the MONTH calendar field in the calendar. Month value is 0-based. e.g., 0 for January.
dayOfMonth int: the value used to set the DAY_OF_MONTH calendar field in the calendar.
hourOfDay int: the value used to set the HOUR_OF_DAY calendar field in the calendar.
minute int: the value used to set the MINUTE calendar field in the calendar.
second int: the value used to set the SECOND calendar field in the calendar.

Public methods

add

Added in API level 1
void add (int field, 
                int amount)

根据日历的规则,将指定(签名)的时间量添加到给定的日历字段。

添加规则1 。 值field通话减去的值之后field呼叫之前是amount ,模内所出现的任何溢出field 。 当字段值超出其范围时会发生溢出,因此,下一个较大的字段会递增或递减,并将字段值调整回其范围。

添加规则2 。 如果一个较小的场预计是不变的,但由于field变化后其最小值或最大值发生变化,它不可能与先前的值相等,则其值会调整为尽可能接近其预期值值。 较小的字段代表较小的时间单位。 HOUR是比DAY_OF_MONTH小的字段。 没有对不期望不变的小字段进行调整。 日历系统确定哪些字段预期是不变的。

Parameters
field int: the calendar field.
amount int: the amount of date or time to be added to the field.
Throws
IllegalArgumentException if field is ZONE_OFFSET, DST_OFFSET, or unknown, or if any calendar fields have out-of-range values in non-lenient mode.

clone

Added in API level 1
Object clone ()

创建并返回此对象的副本。

Returns
Object a copy of this object.

equals

Added in API level 1
boolean equals (Object obj)

将此GregorianCalendar与指定的Object 。 结果为true当且仅当参数是一个GregorianCalendar对象,该对象表示与该对象相同的Calendar参数和公历更改日期下的相同时间值(与Epoch的毫秒偏移量)。

Parameters
obj Object: the object to compare with.
Returns
boolean true if this object is equal to obj; false otherwise.

也可以看看:

getActualMaximum

Added in API level 1
int getActualMaximum (int field)

返回此日历字段可能有,考虑到给定的时间值和的当前值中的最大值getFirstDayOfWeek , getMinimalDaysInFirstWeek , getGregorianChange和getTimeZone方法。 例如,如果此实例的日期为2004年2月1日,则DAY_OF_MONTH字段的实际最大值为29,因为2004年是闰年,如果此实例的日期为2005年2月1日,则为28。

此方法基于YEAR (日历年)值计算最大值WEEK_OF_YEAR ,而不是week year 。 请致电getWeeksInWeekYear() ,在此GregorianCalendar的WEEK_OF_YEAR中获取最大值GregorianCalendar 。

Parameters
field int: the calendar field
Returns
int the maximum of the given field for the time value of this GregorianCalendar

也可以看看:

getActualMinimum

Added in API level 1
int getActualMinimum (int field)

返回此日历字段可能有,考虑到给定的时间值和的当前值的最小值 getFirstDayOfWeek , getMinimalDaysInFirstWeek , getGregorianChange和 getTimeZone方法。

例如,如果公历的更改日期是1970年1月10日,而此GregorianCalendar的日期是1970年1月20日,则DAY_OF_MONTH的实际最小值为10,因为1970年1月10日的上一个日期是1996年12月27日在朱利安日历中)。 因此,1969年12月28日至1970年1月9日不存在。

Parameters
field int: the calendar field
Returns
int the minimum of the given field for the time value of this GregorianCalendar

也可以看看:

getGreatestMinimum

Added in API level 1
int getGreatestMinimum (int field)

返回此GregorianCalendar实例的给定日历字段的最大最小值。 最高的最小值被定义为返回的最大价值getActualMinimum(int)任何可能的时间值,同时考虑到的当前值getFirstDayOfWeek , getMinimalDaysInFirstWeek , getGregorianChange和getTimeZone方法。

Parameters
field int: the calendar field.
Returns
int the highest minimum value for the given calendar field.

也可以看看:

getGregorianChange

Added in API level 1
Date getGregorianChange ()

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

Returns
Date the Gregorian cutover date for this GregorianCalendar object.

getLeastMaximum

Added in API level 1
int getLeastMaximum (int field)

返回此GregorianCalendar实例的给定日历字段的最小最大值。 的最低的最大值被定义为通过返回最小值getActualMaximum(int)任何可能的时间值,同时考虑到的电流值getFirstDayOfWeek , getMinimalDaysInFirstWeek , getGregorianChange和getTimeZone方法。

Parameters
field int: the calendar field
Returns
int the lowest maximum value for the given calendar field.

也可以看看:

getMaximum

Added in API level 1
int getMaximum (int field)

返回此GregorianCalendar实例的给定日历字段的GregorianCalendar 。 最大值被定义为通过返回的最大值get方法为任何可能的时间值,同时考虑到的电流值getFirstDayOfWeek , getMinimalDaysInFirstWeek , getGregorianChange和getTimeZone方法。

Parameters
field int: the calendar field.
Returns
int the maximum value for the given calendar field.

也可以看看:

getMinimum

Added in API level 1
int getMinimum (int field)

返回此GregorianCalendar实例的给定日历字段的GregorianCalendar 。 最小值被定义为通过返回最小值get方法为任何可能的时间值,同时考虑到的电流值getFirstDayOfWeek , getMinimalDaysInFirstWeek , getGregorianChange和getTimeZone方法。

Parameters
field int: the calendar field.
Returns
int the minimum value for the given calendar field.

也可以看看:

getTimeZone

Added in API level 1
TimeZone getTimeZone ()

获取时区。

Returns
TimeZone the time zone object associated with this calendar.

getWeekYear

Added in API level 24
int getWeekYear ()

返回由此GregorianCalendar表示的GregorianCalendar 。 在1周到周的最大周数之间的周期中的日期具有与YEAR (日历年)值之前或之后的一年相同的周年价值。

此方法在计算 complete()之前调用 complete() 。

Returns
int the week year represented by this GregorianCalendar. If the ERA value is BC, the year is represented by 0 or a negative number: BC 1 is 0, BC 2 is -1, BC 3 is -2, and so on.
Throws
IllegalArgumentException if any of the calendar fields is invalid in non-lenient mode.

也可以看看:

getWeeksInWeekYear

Added in API level 24
int getWeeksInWeekYear ()

返回周在数量 week year由这代表 GregorianCalendar 。

例如,如果此 GregorianCalendar的日期为2008年12月31日,日期为 the ISO 8601 compatible setting ,则此方法将在2008年12月29日至2010年1月3日期间返回53,而 getActualMaximum(WEEK_OF_YEAR)将返回52,期间为2007年12月31日至12月28日,2008年。

Returns
int the number of weeks in the week year.

也可以看看:

hashCode

Added in API level 1
int hashCode ()

为此 GregorianCalendar对象生成哈希码。

Returns
int a hash code value for this object.

isLeapYear

Added in API level 1
boolean isLeapYear (int year)

确定给定年份是否为闰年。 如果给定的年份是闰年,则返回true 。 要指定BC年数,必须给出1 - year number 。 例如,BC 4年被指定为-3。

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

isWeekDateSupported

Added in API level 24
boolean isWeekDateSupported ()

退货 true表明此 GregorianCalendar支持周日期。

Returns
boolean true (always)

也可以看看:

roll

Added in API level 1
void roll (int field, 
                boolean up)

在给定时间字段上添加或减去(上/下)单个时间单位而不改变更大的字段。

例如 :考虑一个 GregorianCalendar最初被设置为1999调用12月31日, roll(Calendar.MONTH, true)套日历至1999年1月31日,该 YEAR场是不变的,因为它比一个更大的领域 MONTH 。

Parameters
field int: the time field.
up boolean: indicates if the value of the specified calendar field is to be rolled up or rolled down. Use true if rolling up, false otherwise.
Throws
IllegalArgumentException if field is ZONE_OFFSET, DST_OFFSET, or unknown, or if any calendar fields have out-of-range values in non-lenient mode.

也可以看看:

roll

Added in API level 1
void roll (int field, 
                int amount)

将已签名的金额添加到指定的日历字段,而不更改较大的字段。 负滚动量意味着从字段中减去而不改变较大的字段。 如果指定的金额为0,则此方法不执行任何操作。

此方法在添加金额前会调用complete() ,以便所有日历字段都标准化。 如果在非宽松模式下有任何日历字段超出范围值,则会抛出IllegalArgumentException 。

例如 :考虑一个GregorianCalendar最初被设置为1999调用8月31日roll(Calendar.MONTH, 8)套日历至1999年 4月30日。 使用GregorianCalendar ,该DAY_OF_MONTH场不能在一个月四月是31。 DAY_OF_MONTH被设置为最接近的可能值, YEAR字段保持1999的值,因为它的字段大于MONTH 。

例如 :考虑最初设置为1999年6月6日星期日的GregorianCalendar调用roll(Calendar.WEEK_OF_MONTH, -1)将日历设置为1999年6月1日星期二,而调用add(Calendar.WEEK_OF_MONTH, -1)将日历设置为1999年5月30日星期日。这是因为滚动规则会施加一个附加约束:该MONTH当不能改变WEEK_OF_MONTH卷。 结合添加规则1,结果日期必须在6月1日星期二到6月5日星期六之间。根据添加规则2,将DAY_OF_WEEK (在更改WEEK_OF_MONTH时不变)设置为星期二,即与星期日最接近的可能值(其中周日是本周的第一天)。

Parameters
field int: the calendar field.
amount int: the signed amount to add to field.
Throws
IllegalArgumentException if field is ZONE_OFFSET, DST_OFFSET, or unknown, or if any calendar fields have out-of-range values in non-lenient mode.

也可以看看:

setGregorianChange

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

setTimeZone

Added in API level 1
void setTimeZone (TimeZone zone)

使用给定的时区值设置时区。

Parameters
zone TimeZone: the given time zone.

setWeekDate

Added in API level 24
void setWeekDate (int weekYear, 
                int weekOfYear, 
                int dayOfWeek)

设置此GregorianCalendar由日期符给出的日期- weekYear , weekOfYear ,并dayOfWeek 。 weekOfYear遵循WEEK_OF_YEAR numbering 。 dayOfWeek值必须是DAY_OF_WEEK值之一: SUNDAY到SATURDAY 。

请注意,数字星期表示法与ISO 8601标准不同,并且当 getFirstDayOfWeek()为 MONDAY和 getMinimalDaysInFirstWeek()为4时, weekOfYear编号与标准兼容。

与 set方法不同,所有日历字段和时间瞬间值都是在返回时计算的。

如果 weekOfYear超出有效周的年范围在 weekYear ,该 weekYear个 weekOfYear值在宽松模式调整,或 IllegalArgumentException在非宽松的模式抛出。

Parameters
weekYear int: the week year
weekOfYear int: the week number based on weekYear
dayOfWeek int: the day of week value: one of the constants for the DAY_OF_WEEK field: SUNDAY, ..., SATURDAY.
Throws
IllegalArgumentException if any of the given date specifiers is invalid, or if any of the calendar fields are inconsistent with the given date specifiers in non-lenient mode

也可以看看:

Protected methods

computeFields

Added in API level 1
void computeFields ()

将时间值(毫秒偏移量从Epoch )转换为日历字段值。 时间不首先重新计算; 重新计算时间,然后在字段中调用complete方法。

也可以看看:

computeTime

Added in API level 1
void computeTime ()

将日历字段值转换为时间值(距离 Epoch的毫秒偏移量)。

Throws
IllegalArgumentException if any calendar fields are invalid.

Hooray!