- 所有已实现的接口:
-
Serializable
,Cloneable
,Comparable<Calendar>
GregorianCalendar
是 Calendar
的一个具体子类,提供了大部分世界上使用的标准日历系统。
GregorianCalendar
是一个混合日历,支持朱利安历和格里高利历两种日历系统,通过一个单一的不连续性来支持,默认情况下对应于格里高利历开始使用的日期(在一些国家是1582年10月15日,在其他国家是稍晚)。调用者可以通过调用 setGregorianChange()
来更改切换日期。
在历史上,那些最先采用格里高利历的国家,1582年10月4日(朱利安历)之后是1582年10月15日(格里高利历)。这个日历正确地模拟了这一点。在格里高利历切换之前,GregorianCalendar
实现了朱利安历。格里高利历和朱利安历之间唯一的区别是闰年规则。朱利安历规定每四年是闰年,而格里高利历则省略了不能被400整除的世纪年份。
GregorianCalendar
实现了推测的格里高利和朱利安历。也就是说,日期是通过无限远地向前和向后推断当前规则计算的。因此,GregorianCalendar
可以用于所有年份生成有意义和一致的结果。然而,使用 GregorianCalendar
获得的日期只有从公元4年3月1日开始才是历史准确的,那时采用了现代朱利安历规则。在此日期之前,闰年规则不规律,甚至在公元前45年之前,朱利安历甚至不存在。
在格里高利历开始使用之前,新年的第一天是3月25日。为了避免混淆,这个日历总是使用1月1日。如果需要,可以对在格里高利历切换之前且落在1月1日至3月24日之间的日期进行手动调整。
年周和周年
计算出的 WEEK_OF_YEAR
字段的值范围从1到53。一个日历年的第一周是从包含来自该年至少 getMinimalDaysInFirstWeek()
天的 getFirstDayOfWeek()
开始的最早的七天期间。因此,它取决于 getMinimalDaysInFirstWeek()
、getFirstDayOfWeek()
的值,以及1月1日的星期几。从一个年份的第一周到下一年的第一周(不包括)的周数从2到52或53按顺序编号(除了涉及朱利安-格里高利转换的年份)。
在构造 GregorianCalendar
时,getFirstDayOfWeek()
和 getMinimalDaysInFirstWeek()
的值是使用与地区相关的资源进行初始化的。当 getFirstDayOfWeek()
是 MONDAY
,getMinimalDaysInFirstWeek()
是4时,周确定与 ISO 8601 标准兼容,这些值在偏好使用标准的地区中使用。这些值可以通过调用 setFirstDayOfWeek()
和 setMinimalDaysInFirstWeek()
明确设置。
周年 与 WEEK_OF_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周是1998年1月4日(星期日)至1998年1月10日(星期六)。这些天的 WEEK_OF_MONTH
为1。1998年1月1日至1998年1月3日的 WEEK_OF_MONTH
为0。如果将 getMinimalDaysInFirstWeek()
更改为3,则1998年1月1日至1998年1月3日的 WEEK_OF_MONTH
为1。
默认字段值
clear
方法将日历字段设置为未定义。如果字段的值未定义,GregorianCalendar
将使用以下默认值。
字段 | 默认值 |
---|---|
ERA |
AD |
YEAR |
1970 |
MONTH |
JANUARY |
DAY_OF_MONTH |
1 |
DAY_OF_WEEK |
星期的第一天 |
WEEK_OF_MONTH |
0 |
DAY_OF_WEEK_IN_MONTH |
1 |
AM_PM |
AM |
HOUR, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND |
0 |
未列出的字段不适用默认值。
示例:
// 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
- 自 JDK 1.1 起:
- 1.1
- 参见:
-
Nested Class Summary
Nested classes/interfaces declared in class java.util.Calendar
Calendar.Builder
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
ERA
字段的值,表示公元纪年(Anno Domini),也称为 CE。static final int
ERA
字段的值,表示公元前纪年(耶稣诞生前),也称为 BCE。Fields declared in class 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
-
Constructor Summary
ConstructorDescription构造一个默认的GregorianCalendar
,使用默认时区中的当前时间和默认的FORMAT
区域设置。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,将给定日期和时间设置为默认时区中的当前时间和默认区域设置。GregorianCalendar
(Locale aLocale) 基于默认时区中的当前时间构造一个GregorianCalendar
,使用给定的区域设置。GregorianCalendar
(TimeZone zone) 基于给定时区中的当前时间构造一个GregorianCalendar
,使用默认的FORMAT
区域设置。GregorianCalendar
(TimeZone zone, Locale aLocale) 基于给定时区中的当前时间构造一个GregorianCalendar
,使用给定的区域设置。 -
Method Summary
Modifier and TypeMethodDescriptionvoid
add
(int field, int amount) 根据日历规则,向给定的日历字段添加指定的(有符号的)时间量。protected void
将时间值(从Epoch的毫秒偏移量)转换为日历字段值。protected void
将日历字段值转换为时间值(从Epoch的毫秒偏移量)。boolean
将此GregorianCalendar
与指定的Object
进行比较。static GregorianCalendar
from
(ZonedDateTime zdt) 从ZonedDateTime
对象获取具有默认区域设置的GregorianCalendar
实例。int
getActualMaximum
(int field) 返回此日历字段可能具有的最大值,考虑到给定的时间值以及getFirstDayOfWeek
、getMinimalDaysInFirstWeek
、getGregorianChange
和getTimeZone
方法的当前值。int
getActualMinimum
(int field) 返回此日历字段可能具有的最小值,考虑到给定的时间值以及getFirstDayOfWeek
、getMinimalDaysInFirstWeek
、getGregorianChange
和getTimeZone
方法的当前值。返回日历类型为"gregory"
。int
getGreatestMinimum
(int field) 返回此GregorianCalendar
实例给定日历字段的最高最小值。final Date
获取格里高利历更改日期。int
getLeastMaximum
(int field) 返回此GregorianCalendar
实例给定日历字段的最低最大值。int
getMaximum
(int field) 返回此GregorianCalendar
实例给定日历字段的最大值。int
getMinimum
(int field) 返回此GregorianCalendar
实例给定日历字段的最小值。int
返回由此GregorianCalendar
表示的周年中的周数。int
返回由此GregorianCalendar
表示的周年。int
hashCode()
为此GregorianCalendar
对象生成哈希码。boolean
isLeapYear
(int year) 确定给定年份是否为闰年。final boolean
返回true
,表示此GregorianCalendar
支持周日期。void
roll
(int field, boolean up) 在不更改较大字段的情况下,添加或减去给定时间字段上的单个时间单位。void
roll
(int field, int amount) 在不更改较大字段的情况下,向指定的日历字段添加有符号的数量。void
setGregorianChange
(Date date) 设置GregorianCalendar
更改日期。void
setWeekDate
(int weekYear, int weekOfYear, int dayOfWeek) 将此对象转换为表示与此GregorianCalendar
相同时间线上的ZonedDateTime
。Methods declared in class 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
-
Field Details
-
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,...- 参见:
-
-
Constructor Details
-
GregorianCalendar
public GregorianCalendar()构造一个默认的GregorianCalendar
,使用默认时区中的当前时间和默认的FORMAT
区域设置。 -
GregorianCalendar
基于给定时区中的当前时间构造一个GregorianCalendar
,使用默认的FORMAT
区域设置。- 参数:
-
zone
- 给定的时区。 - 抛出:
-
NullPointerException
- 如果zone
为null
-
GregorianCalendar
基于默认时区中的当前时间构造一个GregorianCalendar
,使用给定的区域设置。- 参数:
-
aLocale
- 给定的区域设置。 - 抛出:
-
NullPointerException
- 如果aLocale
为null
-
GregorianCalendar
基于给定时区中的当前时间构造一个GregorianCalendar
,使用给定的区域设置。- 参数:
-
zone
- 给定的时区。 -
aLocale
- 给定的区域设置。 - 抛出:
-
NullPointerException
- 如果zone
或aLocale
为null
-
GregorianCalendar
public GregorianCalendar(int year, int month, int dayOfMonth) 将给定日期设置为默认时区中的当前时间和默认区域设置,构造一个GregorianCalendar
。- 参数:
-
year
- 用于设置日历中的YEAR
字段的值。 -
month
- 用于设置日历中的MONTH
字段的值。月份值从0开始。例如,1月为0。 -
dayOfMonth
- 用于设置日历中的DAY_OF_MONTH
字段的值。
-
GregorianCalendar
public GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 将给定日期和时间设置为默认时区中的当前时间和默认区域设置,构造一个GregorianCalendar
。- 参数:
-
year
- 用于设置日历中的YEAR
字段的值。 -
month
- 用于设置日历中的MONTH
字段的值。月份值从0开始。例如,1月为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开始。例如,1月为0。 -
dayOfMonth
- 用于设置日历中的DAY_OF_MONTH
字段的值。 -
hourOfDay
- 用于设置日历中的HOUR_OF_DAY
字段的值。 -
minute
- 用于设置日历中的MINUTE
字段的值。 -
second
- 用于设置日历中的SECOND
字段的值。
-
-
Method Details
-
setGregorianChange
设置GregorianCalendar
更改日期。这是从儒略日期切换到公历日期发生的时间点。默认为1582年10月15日(公历)。在此之前,日期将采用儒略历。要获得纯粹的儒略历,将更改日期设置为
Date(Long.MAX_VALUE)
。要获得纯粹的公历,将更改日期设置为Date(Long.MIN_VALUE)
。- 参数:
-
date
- 给定的公历切换日期。
-
getGregorianChange
获取格里高利历更改日期。这是从儒略日期切换到公历日期发生的时间点。默认为1582年10月15日(公历)。在此之前,日期将采用儒略历。- 返回:
-
此
GregorianCalendar
对象的格里高利历切换日期。
-
isLeapYear
public boolean isLeapYear(int year) 确定给定年份是否为闰年。如果给定年份是闰年,则返回true
。要指定公元前年份,必须给出1 - 年数
。例如,公元前4年指定为-3。- 参数:
-
year
- 给定的年份。 - 返回:
-
如果给定年份是闰年,则返回
true
;否则返回false
。
-
getCalendarType
返回日历类型为"gregory"
。- 覆盖:
-
getCalendarType
在类Calendar
- 返回:
-
"gregory"
- 自版本:
- 1.8
- 参见:
-
equals
将此GregorianCalendar
与指定的Object
进行比较。如果参数是代表相同时间值(从Epoch的毫秒偏移量)在相同的Calendar
参数和Gregorian更改日期下的GregorianCalendar
对象,则结果为true
。 -
hashCode
public int hashCode()为此GregorianCalendar
对象生成哈希码。 -
add
public void add(int field, int amount) 根据日历的规则,向给定的日历字段添加指定的(有符号)时间量。添加规则1。调用后
field
的值减去调用前field
的值为amount
,取模任何在field
中发生的溢出。当字段值超出其范围并且因此下一个较大字段被递增或递减并且字段值被调整回其范围时,会发生溢出。添加规则2。如果预期较小字段是不变的,但由于在更改
field
后其最小值或最大值发生变化而不可能等于其先前值,则将其值调整为尽可能接近其预期值。较小字段表示较小的时间单位。HOUR
是比DAY_OF_MONTH
更小的字段。对于不预期是不变的较小字段,不会进行调整。日历系统确定哪些字段预计是不变的。- 由以下指定:
-
add
在类Calendar
- 参数:
-
field
- 日历字段。 -
amount
- 要添加到字段的日期或时间量。 - 抛出:
-
IllegalArgumentException
- 如果field
是ZONE_OFFSET
、DST_OFFSET
或未知,或者在非宽松模式下任何日历字段具有超出范围的值。 - 参见:
-
roll
public void roll(int field, boolean up) 在不更改较大字段的情况下添加或减去给定时间字段上的单个时间单位。示例:考虑一个最初设置为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
。示例:考虑一个最初设置为1999年8月31日的
GregorianCalendar
。调用roll(Calendar.MONTH, 8)
将日历设置为1999年4月30日。1999年。使用GregorianCalendar
,在4月份DAY_OF_MONTH
字段不能为31。DAY_OF_MONTH
设置为最接近的可能值,即30。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日星期日。这是因为滚动规则施加了额外的约束:当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
实例给定日历字段的最小值。最小值定义为考虑到当前值的getFirstDayOfWeek
、getMinimalDaysInFirstWeek
、getGregorianChange
和getTimeZone
方法的最小值。- 由以下指定:
-
getMinimum
在类Calendar
- 参数:
-
field
- 日历字段。 - 返回:
- 给定日历字段的最小值。
- 参见:
-
getMaximum
public int getMaximum(int field) 返回此GregorianCalendar
实例给定日历字段的最大值。最大值定义为考虑到当前值的getFirstDayOfWeek
、getMinimalDaysInFirstWeek
、getGregorianChange
和getTimeZone
方法的最大值。- 指定者:
-
getMaximum
在类Calendar
中 - 参数:
-
field
- 日历字段。 - 返回值:
- 给定日历字段的最大值。
- 参见:
-
getGreatestMinimum
public int getGreatestMinimum(int field) 返回此GregorianCalendar
实例的给定日历字段的最高最小值。最高最小值被定义为getActualMinimum(int)
对于任何可能的时间值返回的最大值,考虑到getFirstDayOfWeek
、getMinimalDaysInFirstWeek
、getGregorianChange
和getTimeZone
方法的当前值。- 指定者:
-
getGreatestMinimum
在类Calendar
中 - 参数:
-
field
- 日历字段。 - 返回值:
- 给定日历字段的最高最小值。
- 参见:
-
getLeastMaximum
public int getLeastMaximum(int field) 返回此GregorianCalendar
实例的给定日历字段的最低最大值。最低最大值被定义为getActualMaximum(int)
对于任何可能的时间值返回的最小值,考虑到getFirstDayOfWeek
、getMinimalDaysInFirstWeek
、getGregorianChange
和getTimeZone
方法的当前值。- 指定者:
-
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日的前一个日期是1969年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
的最大值,而不是week year
。调用getWeeksInWeekYear()
以获取此GregorianCalendar
的周年中WEEK_OF_YEAR
的最大值。- 覆盖:
-
getActualMaximum
在类Calendar
中 - 参数:
-
field
- 日历字段 - 返回值:
-
此
GregorianCalendar
的时间值的给定字段的最大值 - 自:
- 1.2
- 参见:
-
isWeekDateSupported
public final boolean isWeekDateSupported()返回true
,表示此GregorianCalendar
支持周日期。- 覆盖:
-
isWeekDateSupported
在类Calendar
中 - 返回值:
-
true
(始终) - 自:
- 1.7
- 参见:
-
getWeekYear
public int getWeekYear()返回此GregorianCalendar
表示的week year
。在周年的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日至2008年12月28日。- 覆盖:
-
getWeeksInWeekYear
在类Calendar
中 - 返回:
- 周年中的周数。
- 自:
- 1.7
- 参见:
-
computeFields
protected void computeFields()将时间值(从Epoch的毫秒偏移量)转换为日历字段值。时间不会首先重新计算;要重新计算时间,然后字段,请调用complete
方法。- 指定者:
-
computeFields
在类Calendar
中 - 参见:
-
computeTime
protected void computeTime()将日历字段值转换为时间值(从Epoch的毫秒偏移量)。- 指定者:
-
computeTime
在类Calendar
中 - 抛出:
-
IllegalArgumentException
- 如果任何日历字段无效。 - 参见:
-
toZonedDateTime
将此对象转换为表示与此GregorianCalendar
相同时间线上的ZonedDateTime
。由于此对象支持儒略-格里高历切换日期而
ZonedDateTime
不支持,因此结果的年、月和日可能具有不同的值。结果将表示ISO日历系统中的正确日期,这也将是修正儒略日的相同值。- 返回:
- 表示与此儒略历日历相同时间线上的分区日期时间
- 自:
- 1.8
-
from
从ZonedDateTime
对象获取具有默认区域设置的GregorianCalendar
实例。由于
ZonedDateTime
不支持儒略-格里高历切换日期并使用ISO日历系统,因此返回的GregorianCalendar是纯儒略历日历,并使用ISO 8601标准进行周定义,其中MONDAY
作为FirstDayOfWeek
,4
作为MinimalDaysInFirstWeek
的值。ZoneDateTime
可以存储比GregorianCalendar
更远的未来和过去的时间线上的点。在这种情况下,此方法将抛出IllegalArgumentException
异常。- 参数:
-
zdt
- 要转换的分区日期时间对象 - 返回:
- 表示与提供的分区日期时间相同时间线上的儒略历日历
- 抛出:
-
NullPointerException
- 如果zdt
为null -
IllegalArgumentException
- 如果分区日期时间过大,无法表示为GregorianCalendar
- 自:
- 1.8
-