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()MONDAYgetMinimalDaysInFirstWeek()是4时,这些值用于首选标准区域。 这些值可以通过调用setFirstDayOfWeek()setMinimalDaysInFirstWeek()来明确设置。

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

例如,1998年1月1日是星期四。 如果getFirstDayOfWeek()MONDAYgetMinimalDaysInFirstWeek()是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()SUNDAYgetMinimalDaysInFirstWeek()是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)

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

int getActualMinimum(int field)

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

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由日期符给出的日期- weekYearweekOfYear ,并 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。 BCAD的过渡年AD是......,2 BC,1 BC,1 AD,2 AD,......

也可以看看:

常数值:1(0x00000001)

BC

Added in API level 1
int BC

ERA字段的值表示共同时代之前(基督之前)的时期,也被称为BCE。 BCAD的过渡年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)

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

此方法基于YEAR (日历年)值计算最大值WEEK_OF_YEAR ,而不是week year 请致电getWeeksInWeekYear() ,在此GregorianCalendarWEEK_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)

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

例如,如果公历的更改日期是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)任何可能的时间值,同时考虑到的当前值getFirstDayOfWeekgetMinimalDaysInFirstWeekgetGregorianChangegetTimeZone方法。

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)任何可能的时间值,同时考虑到的电流值getFirstDayOfWeekgetMinimalDaysInFirstWeekgetGregorianChangegetTimeZone方法。

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方法为任何可能的时间值,同时考虑到的电流值getFirstDayOfWeekgetMinimalDaysInFirstWeekgetGregorianChangegetTimeZone方法。

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方法为任何可能的时间值,同时考虑到的电流值getFirstDayOfWeekgetMinimalDaysInFirstWeekgetGregorianChangegetTimeZone方法。

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由日期符给出的日期- weekYearweekOfYear ,并dayOfWeek weekOfYear遵循WEEK_OF_YEAR numbering dayOfWeek值必须是DAY_OF_WEEK值之一: SUNDAYSATURDAY

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

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

如果 weekOfYear超出有效周的年范围在 weekYear ,该 weekYearweekOfYear值在宽松模式调整,或 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!