- 所有已实现的接口:
Serializable,Cloneable,Comparable<Calendar>
GregorianCalendar 是 Calendar 的具体子类,提供世界上大部分地区使用的标准日历系统。
GregorianCalendar 是一种混合日历,支持儒略历和公历系统,并支持单个不连续性,默认情况下对应于公历制定时的公历日期(在某些国家/地区为 1582 年 10 月 15 日,在其他国家/地区为晚些时候)。调用者可以通过调用 setGregorianChange() 来更改切换日期。
从历史上看,在那些首先采用公历的国家中,1582 年 10 月 4 日(儒略历)随后是 1582 年 10 月 15 日(公历)。这个日历正确地模拟了这一点。在格里高利转换之前,GregorianCalendar 实施儒略历。公历和儒略历之间的唯一区别是闰年规则。儒略历每四年指定一次闰年,而公历省略了不能被 400 整除的世纪年。
GregorianCalendar 实施 proleptic 公历和儒略历。也就是说,日期是通过在时间上向后和向前无限远地外推当前规则来计算的。因此,GregorianCalendar 可用于所有年份以生成有意义且一致的结果。但是,使用 GregorianCalendar 获得的日期在历史上仅从公元 4 年 3 月 1 日开始准确,当时采用了现代儒略历规则。在此日期之前,不定期应用闰年规则,而在公元前 45 年之前,儒略历甚至不存在。
在公历建立之前,元旦是 3 月 25 日。为避免混淆,此日历始终使用 1 月 1 日。如果需要,可以对公历转换之前的日期和 1 月 1 日之间的日期进行手动调整和 3 月 24 日。
一年中的一周和一年中的一周
为 WEEK_OF_YEAR 字段计算的值范围从 1 到 53。日历年的第一周是从 getFirstDayOfWeek() 开始的最早的 7 天时间段,其中至少包含该年的 getMinimalDaysInFirstWeek() 天。因此,它取决于 getMinimalDaysInFirstWeek() 、 getFirstDayOfWeek() 的值和 1 月 1 日的星期几。一年的第 1 周和下一年的第 1 周(不包括在内)之间的周数从 2 到 52 或 53(除了参与儒略-格里高利转换的年份)。
getFirstDayOfWeek() 和 getMinimalDaysInFirstWeek() 值在构造 GregorianCalendar 时使用依赖于locale的资源进行初始化。 周确定兼容 符合 ISO 8601 标准,当 getFirstDayOfWeek() 为 MONDAY 且 getMinimalDaysInFirstWeek() 为 4 时,这些值用于首选标准的区域设置。这些值可以通过调用 setFirstDayOfWeek() 和 setMinimalDaysInFirstWeek() 来明确设置。
week year 与 WEEK_OF_YEAR 周期同步。第一周和最后一周(含)之间的所有周都具有相同的 week year 值。因此,一周的第一天和最后一天可能具有不同的日历年值。
例如,1998 年 1 月 1 日是星期四。如果 getFirstDayOfWeek() 为 MONDAY 且 getMinimalDaysInFirstWeek() 为 4(ISO 8601 标准兼容设置),则 1998 年的第 1 周从 1997 年 12 月 29 日开始,到 1998 年 1 月 4 日结束。对于 1997 日历年的最后三天,星期年份为 1998 . 但是,如果 getFirstDayOfWeek() 是 SUNDAY ,则 1998 年的第 1 周从 1998 年 1 月 4 日开始,到 1998 年 1 月 10 日结束; 1998 年的前三天是 1997 年第 53 周的一部分,他们的星期年是 1997 年。
每月的星期
为 WEEK_OF_MONTH 字段计算的值范围从 0 到 6。一个月的第 1 周(带有 WEEK_OF_MONTH = 1 的日子)是该月中最早的一组至少 getMinimalDaysInFirstWeek() 连续天数,在 getFirstDayOfWeek() 之前的一天结束。与一年的第 1 周不同,一个月的第 1 周可能短于 7 天,不需要从 getFirstDayOfWeek() 开始,并且不包括上个月的天数。第 1 周之前一个月的天数的 WEEK_OF_MONTH 为 0。
例如,如果 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。
默认字段值
clear 方法将日历字段设置为未定义。 GregorianCalendar 如果每个日历字段的值未定义,则使用以下默认值。
| Field | 默认值 |
|---|---|
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 |
默认值不适用于上面未列出的字段。
Example:
// 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
- 自从:
- 1.1
- 参见:
-
内部类总结
在类 java.util.Calendar 中声明的嵌套类/接口
Calendar.Builder -
字段摘要
字段修饰符和类型Field描述static final intERA字段的值指示共同纪元 (Anno Domini),也称为 CE。static final intERA字段的值指示共同时代(基督之前)之前的时期,也称为 BCE。在类 java.util.Calendar 中声明的字段
ALL_STYLES, AM, AM_PM, APRIL, areFieldsSet, AUGUST, DATE, DAY_OF_MONTH, DAY_OF_WEEK, DAY_OF_WEEK_IN_MONTH, DAY_OF_YEAR, DECEMBER, DST_OFFSET, ERA, FEBRUARY, FIELD_COUNT, fields, FRIDAY, HOUR, HOUR_OF_DAY, isSet, isTimeSet, JANUARY, JULY, JUNE, LONG, LONG_FORMAT, LONG_STANDALONE, MARCH, MAY, MILLISECOND, MINUTE, MONDAY, MONTH, NARROW_FORMAT, NARROW_STANDALONE, NOVEMBER, OCTOBER, PM, SATURDAY, SECOND, SEPTEMBER, SHORT, SHORT_FORMAT, SHORT_STANDALONE, SUNDAY, THURSDAY, time, TUESDAY, UNDECIMBER, WEDNESDAY, WEEK_OF_MONTH, WEEK_OF_YEAR, YEAR, ZONE_OFFSET -
构造方法总结
构造方法构造方法描述使用默认FORMAT区域设置的默认时区中的当前时间构造默认GregorianCalendar。GregorianCalendar(int year, int month, int dayOfMonth) 构造一个GregorianCalendar,在默认时区和默认locale中设置给定日期。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。GregorianCalendar(Locale aLocale) 根据给定区域设置的默认时区中的当前时间构造一个GregorianCalendar。GregorianCalendar(TimeZone zone) 使用默认的FORMAT区域设置,根据给定时区中的当前时间构造一个GregorianCalendar。GregorianCalendar(TimeZone zone, Locale aLocale) 根据给定区域设置的给定时区中的当前时间构造一个GregorianCalendar。 -
方法总结
修饰符和类型方法描述voidadd(int field, int amount) 根据日历的规则,将指定的(有符号的)时间量添加到给定的日历字段。protected void将时间值(从 时代 偏移的毫秒数)转换为日历字段值。protected void将日历字段值转换为时间值(与 时代 的毫秒偏移量)。boolean将此GregorianCalendar与指定的Object进行比较。static GregorianCalendarfrom(ZonedDateTime zdt) 从ZonedDateTime对象获取具有默认locale的GregorianCalendar实例。intgetActualMaximum(int field) 返回此日历字段可能具有的最大值,同时考虑给定的时间值和getFirstDayOfWeek、getMinimalDaysInFirstWeek、getGregorianChange和getTimeZone方法的当前值。intgetActualMinimum(int field) 返回此日历字段可能具有的最小值,同时考虑给定的时间值和getFirstDayOfWeek、getMinimalDaysInFirstWeek、getGregorianChange和getTimeZone方法的当前值。返回"gregory"作为日历类型。intgetGreatestMinimum(int field) 返回此GregorianCalendar实例的给定日历字段的最高最小值。final Date获取公历更改日期。intgetLeastMaximum(int field) 返回此GregorianCalendar实例的给定日历字段的最小最大值。intgetMaximum(int field) 返回此GregorianCalendar实例的给定日历字段的最大值。intgetMinimum(int field) 返回此GregorianCalendar实例的给定日历字段的最小值。int返回由此GregorianCalendar表示的 周年 中的周数。int返回由此GregorianCalendar表示的 周年。inthashCode()为此GregorianCalendar对象生成哈希码。booleanisLeapYear(int year) 确定给定年份是否为闰年。final boolean返回true表示此GregorianCalendar支持周日期。voidroll(int field, boolean up) 在给定时间字段上添加或减去(向上/向下)单个时间单位而不更改更大的字段。voidroll(int field, int amount) 在不更改较大字段的情况下将带符号的金额添加到指定的日历字段。voidsetGregorianChange(Date date) 设置GregorianCalendar更改日期。voidsetWeekDate(int weekYear, int weekOfYear, int dayOfWeek) 将此对象转换为ZonedDateTime,表示时间线上与此GregorianCalendar相同的点。在类 java.util.Calendar 中声明的方法
after, before, clear, clear, clone, compareTo, complete, get, getAvailableCalendarTypes, getAvailableLocales, getDisplayName, getDisplayNames, getFirstDayOfWeek, getInstance, getInstance, getInstance, getInstance, getMinimalDaysInFirstWeek, getTime, getTimeInMillis, getTimeZone, internalGet, isLenient, isSet, set, set, set, set, setFirstDayOfWeek, setLenient, setMinimalDaysInFirstWeek, setTime, setTimeInMillis, setTimeZone, toInstant, toString
-
字段详细信息
-
BC
public static final int BCERA字段的值指示共同时代(基督之前)之前的时期,也称为 BCE。从BC到AD过渡的年份顺序是 ..., 2 BC, 1 BC, 1 AD, 2 AD,...- 参见:
-
AD
public static final int ADERA字段的值指示共同纪元 (Anno Domini),也称为 CE。从BC到AD过渡的年份顺序是 ..., 2 BC, 1 BC, 1 AD, 2 AD,...- 参见:
-
-
构造方法详细信息
-
GregorianCalendar
public GregorianCalendar()使用默认FORMAT区域设置的默认时区中的当前时间构造默认GregorianCalendar。 -
GregorianCalendar
使用默认的FORMAT区域设置,根据给定时区中的当前时间构造一个GregorianCalendar。- 参数:
zone- 给定的时区。
-
GregorianCalendar
根据给定区域设置的默认时区中的当前时间构造一个GregorianCalendar。- 参数:
aLocale- 给定的locale。
-
GregorianCalendar
根据给定区域设置的给定时区中的当前时间构造一个GregorianCalendar。- 参数:
zone- 给定的时区。aLocale- 给定的locale。
-
GregorianCalendar
public GregorianCalendar(int year, int month, int dayOfMonth) 构造一个GregorianCalendar,在默认时区和默认locale中设置给定日期。- 参数:
year- 用于在日历中设置YEAR日历字段的值。month- 用于在日历中设置MONTH日历字段的值。月份值从 0 开始。例如,0 表示一月。dayOfMonth- 用于设置日历中DAY_OF_MONTH日历字段的值。
-
GregorianCalendar
public GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 使用默认区域设置为默认时区设置给定日期和时间构造GregorianCalendar。- 参数:
year- 用于在日历中设置YEAR日历字段的值。month- 用于在日历中设置MONTH日历字段的值。月份值从 0 开始。例如,0 表示一月。dayOfMonth- 用于设置日历中DAY_OF_MONTH日历字段的值。hourOfDay- 用于在日历中设置HOUR_OF_DAY日历字段的值。minute- 用于在日历中设置MINUTE日历字段的值。
-
GregorianCalendar
public GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) 使用默认区域设置为默认时区设置给定日期和时间构造一个 GregorianCalendar。- 参数:
year- 用于在日历中设置YEAR日历字段的值。month- 用于在日历中设置MONTH日历字段的值。月份值从 0 开始。例如,0 表示一月。dayOfMonth- 用于设置日历中DAY_OF_MONTH日历字段的值。hourOfDay- 用于在日历中设置HOUR_OF_DAY日历字段的值。minute- 用于在日历中设置MINUTE日历字段的值。second- 用于在日历中设置SECOND日历字段的值。
-
-
方法详情
-
setGregorianChange
设置GregorianCalendar更改日期。这是从 Julian 日期转换为 Gregorian 日期的时间点。默认值为 1582 年 10 月 15 日(公历)。在此之前,日期将采用儒略历。要获得纯儒略历,请将更改日期设置为
Date(Long.MAX_VALUE)。要获得纯公历,请将更改日期设置为Date(Long.MIN_VALUE)。- 参数:
date- 给定的公历转换日期。
-
getGregorianChange
获取公历更改日期。这是从 Julian 日期转换为 Gregorian 日期的时间点。默认值为 1582 年 10 月 15 日(公历)。在此之前,日期将采用儒略历。- 返回:
-
此
GregorianCalendar对象的公历转换日期。
-
isLeapYear
public boolean isLeapYear(int year) 确定给定年份是否为闰年。如果给定年份是闰年,则返回true。要指定 BC 年份数字,必须给出1 - year number。例如,BC 4 年指定为 -3。- 参数:
year- 给定年份。- 返回:
true如果给定年份是闰年;false否则。
-
getCalendarType
返回"gregory"作为日历类型。- 重写:
getCalendarType在类Calendar中- 返回:
"gregory"- 自从:
- 1.8
- 参见:
-
equals
将此GregorianCalendar与指定的Object进行比较。结果是true当且仅当参数是一个GregorianCalendar对象,该对象在与该对象相同的Calendar参数和公历更改日期下表示相同的时间值(与 时代 的毫秒偏移量)。 -
hashCode
public int hashCode()为此GregorianCalendar对象生成哈希码。 -
add
public void add(int field, int amount) 根据日历的规则,将指定的(有符号的)时间量添加到给定的日历字段。Add rule 1。调用后
field的值减去调用前field的值是amount,对field中发生的任何溢出取模。当字段值超出其范围时会发生溢出,因此,下一个较大的字段会递增或递减,并且字段值会调整回其范围内。Add rule 2。如果期望一个较小的字段是不变的,但是由于
field改变后它的最小值或最大值发生变化而不可能等于它的先前值,那么它的值被调整为尽可能接近它的期望值值。较小的字段代表较小的时间单位。HOUR是比DAY_OF_MONTH更小的字段。不对预计不会不变的较小字段进行任何调整。日历系统确定哪些字段应该是不变的。- 指定者:
add在类Calendar中- 参数:
field- 日历字段。amount- 要添加到字段的日期或时间量。- 抛出:
IllegalArgumentException- 如果field是ZONE_OFFSET、DST_OFFSET或未知,或者如果任何日历字段在非宽松模式下具有超出范围的值。- 参见:
-
roll
public void roll(int field, boolean up) 在给定时间字段上添加或减去(向上/向下)单个时间单位而不更改更大的字段。Example:考虑最初设置为 1999 年 12 月 31 日的
GregorianCalendar。调用roll(Calendar.MONTH, true)将日历设置为 1999 年 1 月 31 日。YEAR字段未更改,因为它比MONTH的字段大。- 指定者:
roll在类Calendar中- 参数:
field- 时间字段。up- 指示指定日历字段的值是向上滚动还是向下滚动。如果汇总使用true,否则使用false。- 抛出:
IllegalArgumentException- 如果field是ZONE_OFFSET、DST_OFFSET或未知,或者如果任何日历字段在非宽松模式下具有超出范围的值。- 参见:
-
roll
public void roll(int field, int amount) 在不更改较大字段的情况下将带符号的金额添加到指定的日历字段。负滚动量意味着从字段中减去而不改变更大的字段。如果指定的金额为 0,则此方法不执行任何操作。此方法在添加金额之前调用
Calendar.complete(),以便对所有日历字段进行规范化。如果在非宽松模式下有任何日历字段具有超出范围的值,则会抛出IllegalArgumentException。Example:考虑
GregorianCalendar最初设置为 1999 年 8 月 31 日。调用roll(Calendar.MONTH, 8)将日历设置为 4 月 30 日,1999。使用GregorianCalendar,DAY_OF_MONTH字段在 4 月不能为 31。DAY_OF_MONTH设置为最接近的可能值 30。YEAR字段保持 1999 的值,因为它比MONTH更大。Example :考虑最初设置为 1999 年 6 月 6 日星期日的
GregorianCalendar。调用roll(Calendar.WEEK_OF_MONTH, -1)将日历设置为 1999 年 6 月 1 日星期二,而调用add(Calendar.WEEK_OF_MONTH, -1)将日历设置为 1999 年 5 月 30 日星期日。这是因为滚动规则强加了一个额外的约束:当滚动WEEK_OF_MONTH时,MONTH不得更改。结合添加规则 1,结果日期必须在 6 月 1 日星期二和 6 月 5 日星期六之间。根据添加规则 2,更改WEEK_OF_MONTH时的不变量DAY_OF_WEEK设置为星期二,最接近星期日的可能值(其中星期日是一周的第一天)。- 重写:
roll在类Calendar中- 参数:
field- 日历字段。amount- 要添加到field的已签名金额。- 抛出:
IllegalArgumentException- 如果field是ZONE_OFFSET、DST_OFFSET或未知,或者如果任何日历字段在非宽松模式下具有超出范围的值。- 自从:
- 1.2
- 参见:
-
getMinimum
public int getMinimum(int field) 返回此GregorianCalendar实例的给定日历字段的最小值。最小值定义为get方法为任何可能的时间值返回的最小值,同时考虑到getFirstDayOfWeek、getMinimalDaysInFirstWeek、getGregorianChange和getTimeZone方法的当前值。- 指定者:
getMinimum在类Calendar中- 参数:
field- 日历字段。- 返回:
- 给定日历字段的最小值。
- 参见:
-
getMaximum
public int getMaximum(int field) 返回此GregorianCalendar实例的给定日历字段的最大值。考虑到getFirstDayOfWeek、getMinimalDaysInFirstWeek、getGregorianChange和getTimeZone方法的当前值,最大值定义为get方法返回的任何可能时间值的最大值。- 指定者:
getMaximum在类Calendar中- 参数:
field- 日历字段。- 返回:
- 给定日历字段的最大值。
- 参见:
-
getGreatestMinimum
public int getGreatestMinimum(int field) 返回此GregorianCalendar实例的给定日历字段的最高最小值。考虑到getFirstDayOfWeek、getMinimalDaysInFirstWeek、getGregorianChange和getTimeZone方法的当前值,最高最小值定义为getActualMinimum(int)返回的任何可能时间值的最大值。- 指定者:
getGreatestMinimum在类Calendar中- 参数:
field- 日历字段。- 返回:
- 给定日历字段的最高最小值。
- 参见:
-
getLeastMaximum
public int getLeastMaximum(int field) 返回此GregorianCalendar实例的给定日历字段的最小最大值。考虑到getFirstDayOfWeek、getMinimalDaysInFirstWeek、getGregorianChange和getTimeZone方法的当前值,最小最大值定义为getActualMaximum(int)为任何可能的时间值返回的最小值。- 指定者:
getLeastMaximum在类Calendar中- 参数:
field- 日历字段- 返回:
- 给定日历字段的最小最大值。
- 参见:
-
getActualMinimum
public 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 日不存在。- 重写:
getActualMinimum在类Calendar中- 参数:
field- 日历字段- 返回:
-
此
GregorianCalendar的时间值的给定字段的最小值 - 自从:
- 1.2
- 参见:
-
getActualMaximum
public int getActualMaximum(int field) 返回此日历字段可能具有的最大值,同时考虑给定的时间值和getFirstDayOfWeek、getMinimalDaysInFirstWeek、getGregorianChange和getTimeZone方法的当前值。例如,如果本实例的日期是2004年2月1日,那么DAY_OF_MONTH字段的实际最大值是29,因为2004年是闰年,如果本实例的日期是2005年2月1日,则为28。此方法根据
YEAR(日历年)值而不是 周年 计算WEEK_OF_YEAR的最大值。调用getWeeksInWeekYear()以获取WEEK_OF_YEAR在这个GregorianCalendar的星期年份中的最大值。- 重写:
getActualMaximum在类Calendar中- 参数:
field- 日历字段- 返回:
-
此
GregorianCalendar的时间值的给定字段的最大值 - 自从:
- 1.2
- 参见:
-
isWeekDateSupported
public final boolean isWeekDateSupported()返回true表示此GregorianCalendar支持周日期。- 重写:
isWeekDateSupported在类Calendar中- 返回:
true(总是)- 自从:
- 1.7
- 参见:
-
getWeekYear
public int getWeekYear()返回由此GregorianCalendar表示的 周年。在 1 和周年的最大周数之间的周中的日期具有相同的周年值,可能是YEAR(日历年)值之前或之后的一年。此方法在计算周年之前调用
Calendar.complete()。- 重写:
getWeekYear在类Calendar中- 返回:
-
这个
GregorianCalendar代表的星期年。如果ERA值为BC,则年份由 0 或负数表示:BC 1 为 0,BC 2 为 -1,BC 3 为 -2,依此类推。 - 抛出:
IllegalArgumentException- 如果任何日历字段在非宽松模式下无效。- 自从:
- 1.7
- 参见:
-
setWeekDate
public void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) 将此GregorianCalendar设置为日期说明符 -weekYear、weekOfYear和dayOfWeek给出的日期。weekOfYear在WEEK_OF_YEAR编号 之后。dayOfWeek值必须是DAY_OF_WEEK值之一:SUNDAY到SATURDAY。请注意,星期几的数字表示与 ISO 8601 标准不同,并且当
getFirstDayOfWeek()为MONDAY且getMinimalDaysInFirstWeek()为 4 时,weekOfYear编号与标准兼容。与
set方法不同,所有日历字段和时间值都是在返回时计算的。如果
weekOfYear超出了weekYear中的有效星期范围,则weekYear和weekOfYear值将在宽松模式下进行调整,或者在非宽松模式下抛出IllegalArgumentException。- 重写:
setWeekDate在类Calendar中- 参数:
weekYear- 星期年weekOfYear- 基于weekYear的周数dayOfWeek- 星期几值:DAY_OF_WEEK字段的常量之一:SUNDAY,...,SATURDAY。- 抛出:
IllegalArgumentException- 如果任何给定的日期说明符无效,或者如果任何日历字段与非宽松模式下的给定日期说明符不一致- 自从:
- 1.7
- 参见:
-
getWeeksInWeekYear
public int getWeeksInWeekYear()返回由此GregorianCalendar表示的 周年 中的周数。例如,如果此
GregorianCalendar的日期是 2008 年 12 月 31 日和 ISO 8601 兼容设置 ,此方法将返回 53 期间:2008 年 12 月 29 日至 2010 年 1 月 3 日,而getActualMaximum(WEEK_OF_YEAR)将返回 52 期间:2007 年 12 月 31 日至 12 月2008 年 2 月 28 日。- 重写:
getWeeksInWeekYear在类Calendar中- 返回:
- 周年中的周数。
- 自从:
- 1.7
- 参见:
-
computeFields
protected void computeFields()将时间值(从 时代 偏移的毫秒数)转换为日历字段值。 not先重新计算时间;要重新计算时间,然后是字段,请调用complete方法。- 指定者:
computeFields在类Calendar中- 参见:
-
computeTime
protected void computeTime()将日历字段值转换为时间值(与 时代 的毫秒偏移量)。- 指定者:
computeTime在类Calendar中- 抛出:
IllegalArgumentException- 如果任何日历字段无效。- 参见:
-
toZonedDateTime
将此对象转换为ZonedDateTime,表示时间线上与此GregorianCalendar相同的点。由于此对象支持 Julian-Gregorian 转换日期而
ZonedDateTime不支持,因此生成的年、月和日可能具有不同的值。结果将代表 ISO 日历系统中的正确日期,这对于修改后的儒略日也将是相同的值。- 返回:
- 表示时间线上与此公历相同的点的分区日期时间
- 自从:
- 1.8
-
from
从ZonedDateTime对象获取具有默认locale的GregorianCalendar实例。由于
ZonedDateTime不支持 Julian-Gregorian 转换日期并使用 ISO 日历系统,因此返回的 GregorianCalendar 是纯公历并使用 ISO 8601 标准定义周,其中MONDAY作为FirstDayOfWeek和4作为MinimalDaysInFirstWeek的值。ZoneDateTime可以将时间线上的点存储在比GregorianCalendar更远的未来和更远的过去。在这种情况下,此方法将抛出IllegalArgumentException异常。- 参数:
zdt- 要转换的分区日期时间对象- 返回:
- 公历表示时间线上与提供的分区日期时间相同的点
- 抛出:
NullPointerException- 如果zdt为空IllegalArgumentException- 如果分区日期时间太大而无法表示为GregorianCalendar- 自从:
- 1.8
-