- 所有已实现的接口:
Serializable,Cloneable,Comparable<Calendar>
- 已知子类:
GregorianCalendar
Calendar 类是一个抽象类,它提供了在特定时刻和一组 calendar fields 之间转换的方法,例如 YEAR 、 MONTH 、 DAY_OF_MONTH 、 HOUR 等,以及用于操作日历字段的方法,例如获取日期下个星期。即时时间可以用毫秒值表示,该值是从 Epoch 开始的偏移量,1970 年 1 月 1 日 00:00:00.000 GMT(公历)。
该类还提供了额外的字段和方法,用于在包外实现具体的日历系统。这些字段和方法定义为 protected 。
与其他locale敏感的类一样,Calendar 提供了一个类方法 getInstance ,用于获取此类型的普遍有用的对象。 Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已用当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
Calendar 对象可以生成实现特定语言和日历样式(例如,日文-公历、日文-繁体)的日期时间格式所需的所有日历字段值。 Calendar 定义了某些日历字段返回的值的范围及其含义。例如,对于所有日历,日历系统的第一个月的值为 MONTH == JANUARY。其他值由具体子类定义,例如 ERA 。有关详细信息,请参阅各个字段文档和子类文档。
获取和设置日历字段值
可以通过调用 set 方法来设置日历字段值。 Calendar 中设置的任何字段值在需要计算其时间值(距纪元的毫秒数)或日历字段的值之前都不会被解释。调用 get 、 getTimeInMillis 、 getTime 、 add 和 roll 涉及这样的计算。
宽大
Calendar 有两种解释日历字段的模式,lenient 和 non-lenient。当 Calendar 处于宽松模式时,它接受比它产生的范围更广的日历字段值。当 Calendar 重新计算 get() 返回的日历字段值时,所有日历字段都被规范化。例如,宽松的 GregorianCalendar 将 MONTH == JANUARY 和 DAY_OF_MONTH == 32 解释为 2 月 1 日。
当 Calendar 处于非宽松模式时,如果其日历字段中存在任何不一致,它会抛出异常。例如,GregorianCalendar 始终生成介于 1 和月份长度之间的 DAY_OF_MONTH 值。如果设置了任何超出范围的字段值,则非宽松的 GregorianCalendar 在计算其时间或日历字段值时会抛出异常。
第一周
Calendar 使用两个参数定义特定于locale的七天一周:一周的第一天和第一周的最少天数(从 1 到 7)。当构造Calendar 时,这些数字取自locale资源数据或locale本身。如果指定的locale包含“fw”和/或“rg” Unicode 扩展 ,则将根据这些扩展名获取一周的第一天。如果同时指定了“fw”和“rg”,则“fw”扩展中的值将取代“rg”扩展中的隐式值。它们也可以通过设置它们的值的方法明确指定。
在设置或获取WEEK_OF_MONTH或WEEK_OF_YEAR字段时,Calendar必须确定月份或年份的第一周作为参考点。一个月或一年的第一周定义为从 getFirstDayOfWeek() 开始并至少包含该月或一年的 getMinimalDaysInFirstWeek() 天的最早七天。编号为 ..., -1, 0 的周数在第一周之前;第 2 周、第 3 周……紧随其后。请注意,get() 返回的规范化编号可能不同。例如,特定的 Calendar 子类可以将一年中第 1 周之前的那一周指定为前一年的第 n 周。
日历字段分辨率
从日历字段中计算日期和时间时,可能计算的信息不足(例如只有年和月,没有日期),或者信息不一致(例如 Tuesday, July 15, 1996 (Gregorian) ) -- 1996年7月15日实际上是一个星期一)。Calendar 将通过以下方式解析日历字段值以确定日期和时间。
如果日历字段值有任何冲突,Calendar 会优先考虑最近设置的日历字段。 以下是日历字段的默认组合。将使用由最近设置的单个字段确定的最近组合。
对于日期字段 :
对于一天中的时间字段 :YEAR + MONTH + DAY_OF_MONTH YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK YEAR + DAY_OF_YEAR YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
HOUR_OF_DAY AM_PM + HOUR
如果有任何日历字段的值尚未在所选字段组合中设置,Calendar 将使用它们的默认值。每个字段的默认值可能因具体的日历系统而异。例如,在 GregorianCalendar 中,一个字段的默认值与 Epoch 的开始相同:即 YEAR = 1970 、 MONTH = JANUARY 、 DAY_OF_MONTH = 1 等。
Note: 某些奇异时间的解释可能存在一定的歧义,通过以下方式解决:
- 23:59 是当天的最后一分钟,00:00 是第二天的第一分钟。因此,1999 年 12 月 31 日 23:59 < 2000 年 1 月 1 日 00:00 < 2000 年 1 月 1 日 00:01。
- 虽然历史上并不准确,但午夜也属于“am”,中午属于“pm”,所以在同一天,12:00 am(午夜)< 12:01 am,12:00 pm(中午)< 12 :01 点
日期或时间格式字符串不是日历定义的一部分,因为它们必须可以在运行时由用户修改或覆盖。使用 DateFormat 格式化日期。
字段操作
可以使用三种方法更改日历字段:set()、add() 和 roll()。
set(f, value) 将日历字段 f 更改为 value。此外,它设置了一个内部成员变量来指示日历字段f 已被更改。尽管日历字段 f 会立即更改,但直到下一次调用 get()、getTime()、getTimeInMillis()、add() 或 roll() 时才会重新计算日历的时间值(以毫秒为单位)。因此,多次调用 set() 不会触发多次不必要的计算。作为使用 set() 更改日历字段的结果,其他日历字段也可能更改,具体取决于日历字段、日历字段值和日历系统。此外,在重新计算日历字段后,get(f) 不一定会返回通过调用 set 方法设置的 value。具体由具体的日历类决定。
Example:考虑最初设置为 1999 年 8 月 31 日的 GregorianCalendar。调用 set(Calendar.MONTH, Calendar.SEPTEMBER) 将日期设置为 1999 年 9 月 31 日。这是一个临时内部表示,如果随后调用 getTime(),则解析为 1999 年 10 月 1 日。但是,在调用 getTime() 之前调用 set(Calendar.DAY_OF_MONTH, 30) 会将日期设置为 1999 年 9 月 30 日,因为在 set() 之后没有重新计算发生。
add(f, delta) 将 delta 添加到字段 f。这相当于调用 set(f, get(f) + delta) 进行了两次调整:
Add rule 1。调用后字段
f的值减去调用前字段f的值是delta,对字段f中发生的任何溢出取模。当字段值超出其范围时会发生溢出,因此,下一个较大的字段会递增或递减,并且字段值会调整回其范围内。Add rule 2。如果期望一个较小的字段是不变的,但由于字段
f更改后其最小值或最大值发生变化或其他约束(例如时区偏移量更改)而使其不可能等于其先前值,则其值调整到尽可能接近其预期值。较小的字段代表较小的时间单位。HOUR是比DAY_OF_MONTH更小的字段。不对预计不会不变的较小字段进行任何调整。日历系统确定哪些字段应该是不变的。
此外,与 set() 不同,add() 强制立即重新计算日历的毫秒数和所有字段。
Example:考虑最初设置为 1999 年 8 月 31 日的 GregorianCalendar。调用 add(Calendar.MONTH, 13) 将日历设置为 2000 年 9 月 30 日。Add rule 1 将 MONTH 字段设置为 9 月,因为将 13 个月加到 8 月得到下一年的 9 月。由于 DAY_OF_MONTH 在 9 月的 GregorianCalendar 中不能为 31,因此 add rule 2 将 DAY_OF_MONTH 设置为 30,这是最接近的可能值。虽然它是一个较小的字段,但 DAY_OF_WEEK 不会根据规则 2 进行调整,因为它预计会在 GregorianCalendar 中的月份更改时更改。
roll(f, delta) 将 delta 添加到字段 f 而不更改更大的字段。这相当于通过以下调整调用 add(f, delta):
Roll rule。较大的字段在调用后保持不变。更大的字段代表更大的时间单位。
DAY_OF_MONTH是一个比HOUR更大的字段。
Example:参见 GregorianCalendar.roll(int, int) 。
Usage model。为了激励 add() 和 roll() 的行为,请考虑一个用户界面组件,其中包含月、日和年的递增和递减按钮,以及一个底层 GregorianCalendar。如果界面显示为 1999 年 1 月 31 日并且用户按下月份递增按钮,它应该显示什么?如果底层实现使用 set() ,它可能读取 1999 年 3 月 3 日。更好的结果是 1999 年 2 月 28 日。此外,如果用户再次按下月份增量按钮,它应该读取 1999 年 3 月 31 日,而不是 1999 年 3 月 28 日. 通过保存原始日期并使用 add() 或 roll() ,根据是否应影响更大的字段,用户界面可以按照大多数用户的直觉预期运行。
- 自从:
- 1.1
- 参见:
-
内部类总结
内部类 -
字段摘要
字段修饰符和类型Field描述static final intgetDisplayNames的样式说明符,指示所有样式的名称,例如“January”和“Jan”。static final intAM_PM字段的值表示一天中从午夜到中午之前的时间段。static final intget和set的字段编号指示HOUR是在中午之前还是之后。static final intMONTH字段的值表示公历和儒略历中一年中的第四个月。protected boolean如果fields[]与当前设置的时间同步则为真。static final intMONTH字段的值表示公历和儒略历中一年中的第八个月。static final intget和set的字段编号指示月份中的日期。static final intget和set的字段编号指示月份中的日期。static final intget和set的字段编号表示星期几。static final intget和set的字段编号指示当前月份中星期几的序号。static final intget和set的字段编号表示当年的天数。static final intMONTH字段的值表示公历和儒略历中一年中的第十二个月。static final intget和set的字段编号指示以毫秒为单位的夏令时偏移量。static final intget和set的字段编号表示纪元,例如儒略历中的 AD 或 BC。static final intMONTH字段的值指示公历和儒略历中一年中的第二个月。static final intget和set识别的不同字段的数量。protected int[]此日历当前设置时间的日历字段值。static final int指示星期五的DAY_OF_WEEK字段的值。static final intget和set的字段编号指示上午或下午的时间。static final intget和set的字段编号指示一天中的小时数。protected boolean[]指示是否设置了日历的指定日历字段的标志。protected boolean如果time的值有效则为真。static final intMONTH字段的值表示公历和儒略历中一年的第一个月。static final intMONTH字段的值表示公历和儒略历中一年中的第七个月。static final intMONTH字段的值表示公历和儒略历中一年中的第六个月。static final intstatic final intgetDisplayName和getDisplayNames的样式说明符指示用于格式的长名称。static final intgetDisplayName和getDisplayNames的样式说明符,指示独立使用的长名称,例如作为日历标题的月份名称。static final intMONTH字段的值表示公历和儒略历中一年中的第三个月。static final intMONTH字段的值表示公历和儒略历中一年中的第五个月。static final intget和set的字段编号表示秒内的毫秒数。static final intget和set的字段编号表示小时内的分钟。static final intDAY_OF_WEEK字段的值指示星期一。static final intget和set的字段编号表示月份。static final intgetDisplayName和getDisplayNames的样式说明符指示用于格式的窄名称。static final intgetDisplayName和getDisplayNames的样式说明符独立指示窄名称。static final intMONTH字段的值表示公历和儒略历中一年中的第十一个月。static final intMONTH字段的值表示公历和儒略历中一年中的第十个月。static final intAM_PM字段的值表示一天中从中午到午夜之前的时间段。static final intDAY_OF_WEEK字段的值表示星期六。static final intget和set的字段编号表示分钟内的秒数。static final intMONTH字段的值表示公历和儒略历中一年中的第九个月。static final intstatic final intgetDisplayName和getDisplayNames的样式说明符指示用于格式的短名称。static final intgetDisplayName和getDisplayNames的样式说明符,指示独立使用的短名称,例如作为日历标题的月份缩写。static final int指示星期日的DAY_OF_WEEK字段的值。static final int指示星期四的DAY_OF_WEEK字段的值。protected long此日历的当前设置时间,以 1970 年 1 月 1 日 0:00:00 GMT 之后的毫秒数表示。static final int指示星期二的DAY_OF_WEEK字段的值。static final intMONTH字段的值表示一年中的第十三个月。static final int指示星期三的DAY_OF_WEEK字段的值。static final intget和set的字段编号表示当月的周数。static final intget和set的字段编号表示当年的周数。static final intget和set的字段编号表示年份。static final intget和set的字段编号表示与 GMT 的原始偏移量(以毫秒为单位)。 -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述abstract voidadd(int field, int amount) 根据日历的规则向给定的日历字段添加或减去指定的时间量。boolean返回此Calendar是否表示指定Object表示的时间之后的时间。boolean返回此Calendar是否表示指定Object表示的时间之前的时间。final voidclear()将此Calendar的所有日历字段值和时间值(与 时代 的毫秒偏移量)设置为未定义。final voidclear(int field) 设置此Calendar未定义的给定日历字段值和时间值(与 时代 的毫秒偏移量)。clone()创建并返回此对象的副本。int比较由两个Calendar对象表示的时间值(与 时代 的毫秒偏移量)。protected voidcomplete()填写日历字段中任何未设置的字段。protected abstract voidprotected abstract voidboolean将此Calendar与指定的Object进行比较。intget(int field) 返回给定日历字段的值。intgetActualMaximum(int field) 给定此Calendar的时间值,返回指定日历字段可能具有的最大值。intgetActualMinimum(int field) 给定此Calendar的时间值,返回指定日历字段可能具有的最小值。返回一个不可修改的Set,其中包含运行时环境中Calendar支持的所有日历类型。static Locale[]返回一个包含所有locale的数组,此类的getInstance方法可以为其返回本地化实例。返回此Calendar的日历类型。getDisplayName(int field, int style, Locale locale) 返回给定style和locale中日历field值的字符串表示形式。getDisplayNames(int field, int style, Locale locale) 返回一个Map,其中包含给定style和locale中日历field的所有名称及其对应的字段值。int获取一周的第一天是什么;例如,SUNDAY在美国,MONDAY在法国。abstract intgetGreatestMinimum(int field) 返回此Calendar实例的给定日历字段的最高最小值。static Calendar使用默认时区和locale获取日历。static CalendargetInstance(Locale aLocale) 获取使用默认时区和指定locale的日历。static CalendargetInstance(TimeZone zone) 获取使用指定时区和默认locale的日历。static CalendargetInstance(TimeZone zone, Locale aLocale) 获取具有指定时区和locale的日历。abstract intgetLeastMaximum(int field) 返回此Calendar实例的给定日历字段的最小最大值。abstract intgetMaximum(int field) 返回此Calendar实例的给定日历字段的最大值。int获取一年中第一周所需的最少天数;例如,如果将第一周定义为一年中第一个月的第一天,则此方法返回 1。abstract intgetMinimum(int field) 返回此Calendar实例的给定日历字段的最小值。final DategetTime()long以毫秒为单位返回此日历的时间值。获取时区。int返回此Calendar表示的周年中的周数。int返回由此Calendar表示的星期年。inthashCode()返回此日历的哈希码。protected final intinternalGet(int field) 返回给定日历字段的值。boolean告知日期/时间解释是否宽松。final booleanisSet(int field) 确定给定的日历字段是否设置了值,包括值已由get方法调用触发的内部字段计算设置的情况。boolean返回此Calendar是否支持周日期。abstract voidroll(int field, boolean up) 在给定时间字段上添加或减去(向上/向下)单个时间单位而不更改更大的字段。voidroll(int field, int amount) 将指定的(带符号的)金额添加到指定的日历字段而不更改更大的字段。voidset(int field, int value) 将给定的日历字段设置为给定的值。final voidset(int year, int month, int date) 设置日历字段YEAR、MONTH和DAY_OF_MONTH的值。final voidset(int year, int month, int date, int hourOfDay, int minute) 设置日历字段YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY和MINUTE的值。final voidset(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY、MINUTE和SECOND的值。voidsetFirstDayOfWeek(int value) 设置一周的第一天是什么;例如,SUNDAY在美国,MONDAY在法国。voidsetLenient(boolean lenient) 指定日期/时间解释是否宽松。voidsetMinimalDaysInFirstWeek(int value) 设置一年中第一周所需的最少天数;例如,如果将第一周定义为包含一年中第一个月的第一天的一周,则使用值 1 调用此方法。final void使用给定的Date设置此日历的时间。voidsetTimeInMillis(long millis) 根据给定的 long 值设置此 Calendar 的当前时间。voidsetTimeZone(TimeZone value) 使用给定的时区值设置时区。voidsetWeekDate(int weekYear, int weekOfYear, int dayOfWeek) 使用给定的日期说明符设置此Calendar的日期 - 年周、年中周和星期几。final Instant将此对象转换为Instant。toString()返回此日历的字符串表示形式。
-
字段详细信息
-
ERA
public static final int ERAget和set的字段编号表示纪元,例如儒略历中的 AD 或 BC。这是一个特定于日历的值;请参阅子类文档。- 参见:
-
YEAR
public static final int YEARget和set的字段编号表示年份。这是一个特定于日历的值;请参阅子类文档。- 参见:
-
MONTH
public static final int MONTHget和set的字段编号表示月份。这是特定于日历的值。在公历和儒略历中,一年的第一个月是JANUARY,即 0;最后一个取决于一年中的月数。- 参见:
-
WEEK_OF_YEAR
public static final int WEEK_OF_YEARget和set的字段编号表示当年的周数。一年中的第一周,由getFirstDayOfWeek()和getMinimalDaysInFirstWeek()定义,值为 1。子类定义一年中第一周之前的天数WEEK_OF_YEAR的值。- 参见:
-
WEEK_OF_MONTH
public static final int WEEK_OF_MONTHget和set的字段编号表示当月的周数。getFirstDayOfWeek()和getMinimalDaysInFirstWeek()定义的月份的第一周的值为 1。子类定义月份第一周之前的天数WEEK_OF_MONTH的值。- 参见:
-
DATE
public static final int DATEget和set的字段编号指示月份中的日期。这是DAY_OF_MONTH的同义词。该月的第一天的值为 1。- 参见:
-
DAY_OF_MONTH
public static final int DAY_OF_MONTHget和set的字段编号指示月份中的日期。这是DATE的同义词。该月的第一天的值为 1。- 参见:
-
DAY_OF_YEAR
public static final int DAY_OF_YEARget和set的字段编号表示当年的天数。一年的第一天的值为 1。- 参见:
-
DAY_OF_WEEK
public static final int DAY_OF_WEEKget和set的字段编号表示星期几。此字段采用值SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY和SATURDAY。- 参见:
-
DAY_OF_WEEK_IN_MONTH
public static final int DAY_OF_WEEK_IN_MONTHget和set的字段编号指示当前月份中星期几的序号。与DAY_OF_WEEK字段一起,这唯一地指定了一个月中的一天。与WEEK_OF_MONTH和WEEK_OF_YEAR不同,此字段的值确实 not 取决于getFirstDayOfWeek()或getMinimalDaysInFirstWeek()。DAY_OF_MONTH 1到7总是对应于DAY_OF_WEEK_IN_MONTH 1;8到14对应于DAY_OF_WEEK_IN_MONTH 2,依此类推。DAY_OF_WEEK_IN_MONTH 0表示DAY_OF_WEEK_IN_MONTH 1之前的一周。负值从月底开始倒计时,因此一个月的最后一个星期日指定为DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1。因为负值是倒数的,所以它们在一个月内的排列方式通常与正值不同。例如,如果一个月有 31 天,DAY_OF_WEEK_IN_MONTH -1将重叠DAY_OF_WEEK_IN_MONTH 5和4的结尾。- 参见:
-
AM_PM
public static final int AM_PMget和set的字段编号指示HOUR是在中午之前还是之后。例如,在晚上 10:04:15.250,AM_PM是PM。- 参见:
-
HOUR
public static final int HOURget和set的字段编号指示上午或下午的时间。HOUR用于 12 小时制 (0 - 11)。中午和午夜用 0 表示,而不是 12。例如,在晚上 10:04:15.250,HOUR为 10。- 参见:
-
HOUR_OF_DAY
public static final int HOUR_OF_DAYget和set的字段编号指示一天中的小时数。HOUR_OF_DAY用于 24 小时制。例如,在晚上 10:04:15.250,HOUR_OF_DAY为 22。- 参见:
-
MINUTE
public static final int MINUTEget和set的字段编号表示小时内的分钟。例如,在晚上 10:04:15.250,MINUTE为 4。- 参见:
-
SECOND
public static final int SECONDget和set的字段编号表示分钟内的秒数。例如,在晚上 10:04:15.250,SECOND为 15。- 参见:
-
MILLISECOND
public static final int MILLISECONDget和set的字段编号表示秒内的毫秒数。例如,在晚上 10:04:15.250,MILLISECOND为 250。- 参见:
-
ZONE_OFFSET
public static final int ZONE_OFFSETget和set的字段编号表示与 GMT 的原始偏移量(以毫秒为单位)。如果
TimeZone实现子类支持历史 GMT 偏移更改,则此字段反映此Calendar时区的正确 GMT 偏移值。- 参见:
-
DST_OFFSET
public static final int DST_OFFSETget和set的字段编号指示以毫秒为单位的夏令时偏移量。如果
TimeZone实现子类支持历史夏令时时间表更改,则此字段反映此Calendar时区的正确夏令时偏移值。- 参见:
-
FIELD_COUNT
public static final int FIELD_COUNTget和set识别的不同字段的数量。字段编号范围从0..FIELD_COUNT-1。- 参见:
-
SUNDAY
public static final int SUNDAY指示星期日的DAY_OF_WEEK字段的值。- 参见:
-
MONDAY
public static final int MONDAYDAY_OF_WEEK字段的值指示星期一。- 参见:
-
TUESDAY
public static final int TUESDAY指示星期二的DAY_OF_WEEK字段的值。- 参见:
-
WEDNESDAY
public static final int WEDNESDAY指示星期三的DAY_OF_WEEK字段的值。- 参见:
-
THURSDAY
public static final int THURSDAY指示星期四的DAY_OF_WEEK字段的值。- 参见:
-
FRIDAY
public static final int FRIDAY指示星期五的DAY_OF_WEEK字段的值。- 参见:
-
SATURDAY
public static final int SATURDAYDAY_OF_WEEK字段的值表示星期六。- 参见:
-
JANUARY
public static final int JANUARYMONTH字段的值表示公历和儒略历中一年的第一个月。- 参见:
-
FEBRUARY
public static final int FEBRUARYMONTH字段的值指示公历和儒略历中一年中的第二个月。- 参见:
-
MARCH
public static final int MARCHMONTH字段的值表示公历和儒略历中一年中的第三个月。- 参见:
-
APRIL
public static final int APRILMONTH字段的值表示公历和儒略历中一年中的第四个月。- 参见:
-
MAY
public static final int MAYMONTH字段的值表示公历和儒略历中一年中的第五个月。- 参见:
-
JUNE
public static final int JUNEMONTH字段的值表示公历和儒略历中一年中的第六个月。- 参见:
-
JULY
public static final int JULYMONTH字段的值表示公历和儒略历中一年中的第七个月。- 参见:
-
AUGUST
public static final int AUGUSTMONTH字段的值表示公历和儒略历中一年中的第八个月。- 参见:
-
SEPTEMBER
public static final int SEPTEMBERMONTH字段的值表示公历和儒略历中一年中的第九个月。- 参见:
-
OCTOBER
public static final int OCTOBERMONTH字段的值表示公历和儒略历中一年中的第十个月。- 参见:
-
NOVEMBER
public static final int NOVEMBERMONTH字段的值表示公历和儒略历中一年中的第十一个月。- 参见:
-
DECEMBER
public static final int DECEMBERMONTH字段的值表示公历和儒略历中一年中的第十二个月。- 参见:
-
UNDECIMBER
public static final int UNDECIMBERMONTH字段的值表示一年中的第十三个月。虽然GregorianCalendar不使用此值,但农历使用。- 参见:
-
AM
public static final int AMAM_PM字段的值表示一天中从午夜到中午之前的时间段。- 参见:
-
PM
public static final int PMAM_PM字段的值表示一天中从中午到午夜之前的时间段。- 参见:
-
ALL_STYLES
public static final int ALL_STYLESgetDisplayNames的样式说明符,指示所有样式的名称,例如“January”和“Jan”。- 自从:
- 1.6
- 参见:
-
SHORT
public static final int SHORT- 自从:
- 1.6
- 参见:
-
LONG
public static final int LONG- 自从:
- 1.6
- 参见:
-
NARROW_FORMAT
public static final int NARROW_FORMATgetDisplayName和getDisplayNames的样式说明符指示用于格式的窄名称。窄名称通常是单个字符串,例如“M”代表星期一。- 自从:
- 1.8
- 参见:
-
NARROW_STANDALONE
public static final int NARROW_STANDALONEgetDisplayName和getDisplayNames的样式说明符独立指示窄名称。窄名称通常是单个字符串,例如“M”代表星期一。- 自从:
- 1.8
- 参见:
-
SHORT_FORMAT
public static final int SHORT_FORMATgetDisplayName和getDisplayNames的样式说明符指示用于格式的短名称。- 自从:
- 1.8
- 参见:
-
LONG_FORMAT
public static final int LONG_FORMATgetDisplayName和getDisplayNames的样式说明符指示用于格式的长名称。- 自从:
- 1.8
- 参见:
-
SHORT_STANDALONE
public static final int SHORT_STANDALONEgetDisplayName和getDisplayNames的样式说明符,指示独立使用的短名称,例如作为日历标题的月份缩写。- 自从:
- 1.8
- 参见:
-
LONG_STANDALONE
public static final int LONG_STANDALONEgetDisplayName和getDisplayNames的样式说明符,指示独立使用的长名称,例如作为日历标题的月份名称。- 自从:
- 1.8
- 参见:
-
fields
protected int[] fields此日历当前设置时间的日历字段值。这是一个FIELD_COUNT整数数组,索引值为ERA到DST_OFFSET。 -
isSet
protected boolean[] isSet指示是否设置了日历的指定日历字段的标志。新对象没有设置字段。在第一次调用生成字段的方法后,它们都保持设置状态。这是一个FIELD_COUNT布尔数组,索引值为ERA到DST_OFFSET。 -
time
protected long time此日历的当前设置时间,以 1970 年 1 月 1 日 0:00:00 GMT 之后的毫秒数表示。- 参见:
-
isTimeSet
protected boolean isTimeSet如果time的值有效则为真。field[]的一项更改使时间无效。- 参见:
-
areFieldsSet
protected boolean areFieldsSet如果fields[]与当前设置的时间同步则为真。如果为 false,则下一次获取字段值的尝试将强制根据time的当前值重新计算所有字段。
-
-
构造方法详细信息
-
Calendar
protected Calendar()构造具有默认时区和默认FORMATlocale的 Calendar。- 参见:
-
Calendar
构造具有指定时区和locale的日历。- 参数:
zone- 使用的时区aLocale- 周数据的locale
-
-
方法详情
-
getInstance
使用默认时区和locale获取日历。返回的Calendar基于具有默认FORMAT区域设置的默认时区中的当前时间。如果locale包含带“tz” Unicode 扩展 的时区,则改用该时区。
- 返回:
- 日历。
-
getInstance
获取使用指定时区和默认locale的日历。返回的Calendar基于具有默认FORMAT区域设置的给定时区中的当前时间。- 参数:
zone- 使用的时区- 返回:
- 日历。
-
getInstance
获取使用默认时区和指定locale的日历。返回的Calendar基于给定区域设置的默认时区中的当前时间。如果locale包含带“tz” Unicode 扩展 的时区,则改用该时区。
- 参数:
aLocale- 周数据的locale- 返回:
- 日历。
-
getInstance
获取具有指定时区和locale的日历。返回的Calendar基于给定区域设置的给定时区中的当前时间。- 参数:
zone- 使用的时区aLocale- 周数据的locale- 返回:
- 日历。
-
getAvailableLocales
返回一个包含所有locale的数组,此类的getInstance方法可以为其返回本地化实例。至少,返回的数组必须包含一个等于Locale.ROOT的Locale实例和一个等于Locale.US的Locale实例。- 返回:
-
本地化
Calendar实例可用的区域设置数组。
-
computeTime
protected abstract void computeTime()- 参见:
-
computeFields
protected abstract void computeFields()将当前毫秒时间值time转换为fields[]中的日历字段值。这允许您将日历字段值与为日历设置的新时间同步。 not先重新计算时间;要重新计算时间,然后是字段,请调用complete()方法。- 参见:
-
getTime
- 返回:
Date表示时间值。- 参见:
-
setTime
使用给定的Date设置此日历的时间。注意:使用
Date(Long.MAX_VALUE)或Date(Long.MIN_VALUE)调用setTime()可能会从get()产生不正确的字段值。- 参数:
date- 给定的日期。- 抛出:
NullPointerException- 如果date是null- 参见:
-
getTimeInMillis
public long getTimeInMillis()以毫秒为单位返回此日历的时间值。- 返回:
- 当前时间作为距纪元的 UTC 毫秒数。
- 参见:
-
setTimeInMillis
public void setTimeInMillis(long millis) 根据给定的 long 值设置此 Calendar 的当前时间。- 参数:
millis- 从纪元算起的以 UTC 毫秒为单位的新时间。- 参见:
-
get
public int get(int field) 返回给定日历字段的值。在宽松模式下,所有日历字段都被规范化。在非宽松模式下,所有日历字段都经过验证,如果任何日历字段的值超出范围,此方法将引发异常。规范化和验证由complete()方法处理,该过程依赖于日历系统。- 参数:
field- 给定的日历字段。- 返回:
- 给定日历字段的值。
- 抛出:
ArrayIndexOutOfBoundsException- 如果指定字段超出范围 (field < 0 || field >= FIELD_COUNT)。- 参见:
-
internalGet
protected final int internalGet(int field) 返回给定日历字段的值。此方法不涉及字段值的规范化或验证。- 参数:
field- 给定的日历字段。- 返回:
- 给定日历字段的值。
- 参见:
-
set
public void set(int field, int value) 将给定的日历字段设置为给定的值。无论宽大模式如何,此方法都不会解释该值。- 参数:
field- 给定的日历字段。value- 要为给定日历字段设置的值。- 抛出:
ArrayIndexOutOfBoundsException- 如果指定字段超出范围 (field < 0 || field >= FIELD_COUNT)。在非宽松模式下。- 参见:
-
set
public final void set(int year, int month, int date) - 参数:
year- 用于设置YEAR日历字段的值。month- 用于设置MONTH日历字段的值。月份值从 0 开始。例如,0 表示一月。date- 用于设置DAY_OF_MONTH日历字段的值。- 参见:
-
set
public final void set(int year, int month, int date, int hourOfDay, int minute) - 参数:
year- 用于设置YEAR日历字段的值。month- 用于设置MONTH日历字段的值。月份值从 0 开始。例如,0 表示一月。date- 用于设置DAY_OF_MONTH日历字段的值。hourOfDay- 用于设置HOUR_OF_DAY日历字段的值。minute- 用于设置MINUTE日历字段的值。- 参见:
-
set
public final void set(int year, int month, int date, int hourOfDay, int minute, int second) - 参数:
year- 用于设置YEAR日历字段的值。month- 用于设置MONTH日历字段的值。月份值从 0 开始。例如,0 表示一月。date- 用于设置DAY_OF_MONTH日历字段的值。hourOfDay- 用于设置HOUR_OF_DAY日历字段的值。minute- 用于设置MINUTE日历字段的值。second- 用于设置SECOND日历字段的值。- 参见:
-
clear
public final void clear()将此Calendar的所有日历字段值和时间值(与 时代 的毫秒偏移量)设置为未定义。这意味着isSet()将为所有日历字段返回false,并且日期和时间计算会将这些字段视为从未设置过。Calendar实现类可以使用其特定的默认字段值进行日期/时间计算。例如,如果YEAR字段值未定义,则GregorianCalendar使用 1970。- 参见:
-
clear
public final void clear(int field) 设置此Calendar未定义的给定日历字段值和时间值(与 时代 的毫秒偏移量)。这意味着isSet(field)将返回false,并且日期和时间计算将把该字段视为从未设置过。Calendar实现类可以使用字段的特定默认值进行日期和时间计算。HOUR_OF_DAY、HOUR和AM_PM字段独立处理,并应用 时间的分辨率规则。清除其中一个字段不会重置此Calendar的小时值。使用set(Calendar.HOUR_OF_DAY, 0)重置小时值。- 参数:
field- 要清除的日历字段。- 参见:
-
isSet
public final boolean isSet(int field) 确定给定的日历字段是否设置了值,包括值已由get方法调用触发的内部字段计算设置的情况。- 参数:
field- 要测试的日历字段- 返回:
true如果给定的日历字段设置了值;false否则。
-
getDisplayName
返回给定style和locale中日历field值的字符串表示形式。如果没有适用的字符串表示,则返回null。如果字符串表示适用于给定日历field,则此方法调用get(field)以获取日历field值。例如,如果这个
Calendar是一个GregorianCalendar并且它的日期是 2005-01-01,那么MONTH字段的字符串表示形式在英语locale中的长格式为“January”或短格式为“Jan”。但是,没有字符串表示形式可用于DAY_OF_MONTH字段,并且此方法将返回null。默认实现支持
DateFormatSymbols在给定locale中具有名称的日历字段。- 参数:
field- 返回字符串表示的日历字段style- 应用于字符串表示的样式;SHORT_FORMAT(SHORT)、SHORT_STANDALONE、LONG_FORMAT(LONG)、LONG_STANDALONE、NARROW_FORMAT或NARROW_STANDALONE之一。locale- 字符串表示的locale(忽略locale指定的任何日历类型)- 返回:
-
给定
field在给定style中的字符串表示,如果没有适用的字符串表示,则为null。 - 抛出:
IllegalArgumentException- 如果field或style无效,或者如果此Calendar不宽松且任何日历字段具有无效值NullPointerException- 如果locale为空- 自从:
- 1.6
-
getDisplayNames
返回一个Map,其中包含给定style和locale中日历field的所有名称及其对应的字段值。例如,如果此Calendar是GregorianCalendar,则返回的映射将包含“Jan”到JANUARY、“Feb”到FEBRUARY等等,在英语locale中采用 short 样式。由于使用单个字符,例如星期日和星期六的“S”,窄名称可能不是唯一的。在这种情况下,返回的
Map中不包含窄名称。可以考虑其他日历字段的值来确定一组显示名称。例如,如果此
Calendar是阴阳历系统并且YEAR字段给出的年份值有闰月,则此方法将返回包含闰月名称的月份名称,并将月份名称映射到它们特定于年份的值。默认实现支持包含在
DateFormatSymbols中的显示名称。例如,如果field是MONTH而style是ALL_STYLES,则此方法返回一个Map包含DateFormatSymbols.getShortMonths()和DateFormatSymbols.getMonths()返回的所有字符串。- 参数:
field- 返回显示名称的日历字段style- 应用于字符串表示的样式;SHORT_FORMAT(SHORT)、SHORT_STANDALONE、LONG_FORMAT(LONG)、LONG_STANDALONE、NARROW_FORMAT或NARROW_STANDALONE之一locale- 显示名称的locale- 返回:
Map包含style和locale中的所有显示名称及其字段值,或者null如果没有为field定义显示名称- 抛出:
IllegalArgumentException- 如果field或style无效,或者如果此Calendar不宽松且任何日历字段具有无效值NullPointerException- 如果locale为空- 自从:
- 1.6
-
complete
protected void complete()填写日历字段中任何未设置的字段。首先,如果时间值(与 时代 的毫秒偏移量)尚未根据日历字段值计算,则调用computeTime()方法。然后调用computeFields()方法计算所有日历字段值。 -
getAvailableCalendarTypes
返回一个不可修改的Set,其中包含运行时环境中Calendar支持的所有日历类型。可用的日历类型可用于 Unicode locale扩展 。返回的Set至少包含"gregory"。日历类型不包括别名,例如"gregorian"为"gregory"。- 返回:
-
包含所有可用日历类型的不可修改的
Set - 自从:
- 1.8
- 参见:
-
getCalendarType
返回此Calendar的日历类型。日历类型由 Unicode Locale Data Markup Language (LDML) 规范定义。此方法的默认实现返回此
Calendar实例的类名。任何实现 LDML 定义的日历系统的子类都应该覆盖此方法以返回适当的日历类型。- 返回:
-
LDML 定义的日历类型或此
Calendar实例的类名 - 自从:
- 1.8
- 参见:
-
equals
-
hashCode
public int hashCode()返回此日历的哈希码。 -
before
返回此Calendar是否表示指定Object表示的时间之前的时间。此方法等效于:
当且仅当compareTo(when) < 0when是一个Calendar实例。否则,该方法返回false。- 参数:
when- 要比较的Object- 返回:
true如果这个Calendar的时间早于when代表的时间;false否则。- 参见:
-
after
返回此Calendar是否表示指定Object表示的时间之后的时间。此方法等效于:
当且仅当compareTo(when) > 0when是一个Calendar实例。否则,该方法返回false。- 参数:
when- 要比较的Object- 返回:
true如果这个Calendar的时间在when代表的时间之后;false否则。- 参见:
-
compareTo
比较由两个Calendar对象表示的时间值(与 时代 的毫秒偏移量)。- 指定者:
compareTo在接口Comparable<Calendar>中- 参数:
anotherCalendar- 要比较的Calendar。- 返回:
-
如果参数表示的时间等于此
Calendar表示的时间,则值为0;如果此Calendar的时间早于参数表示的时间,则该值小于0;如果此Calendar的时间晚于参数表示的时间,则该值大于0。 - 抛出:
NullPointerException- 如果指定的Calendar是null。IllegalArgumentException- 如果由于任何无效的日历值而无法获取指定的Calendar对象的时间值。- 自从:
- 1.5
-
add
public abstract void add(int field, int amount) 根据日历的规则向给定的日历字段添加或减去指定的时间量。例如,要从日历的当前时间减去 5 天,可以通过调用来实现:add(Calendar.DAY_OF_MONTH, -5).- 参数:
field- 日历字段。amount- 要添加到字段的日期或时间量。- 参见:
-
roll
public abstract void roll(int field, boolean up) 在给定时间字段上添加或减去(向上/向下)单个时间单位而不更改更大的字段。例如,要将当前日期向上滚动一天,您可以通过调用来实现:滚动(日历。日期,真)。在年份或 Calendar.YEAR 字段上滚动时,它将在 1 和调用
getMaximum(Calendar.YEAR)返回的值之间的范围内滚动年份值。在月份或 Calendar.MONTH 字段上滚动时,日期等其他字段可能会发生冲突,需要更改。例如,在日期 01/31/96 滚动月份将导致 02/29/96。在 hour-in-day 或 Calendar.HOUR_OF_DAY 字段上滚动时,它将在 0 到 23 之间的范围内滚动小时值,这是从零开始的。- 参数:
field- 时间字段。up- 指示指定时间字段的值是向上滚动还是向下滚动。如果卷起则使用 true,否则使用 false。- 参见:
-
roll
public void roll(int field, int amount) 将指定的(带符号的)金额添加到指定的日历字段而不更改更大的字段。负数表示向下滚动。注意:
Calendar上的默认实现只是重复调用滚动一个单位的roll()版本。这可能并不总是做正确的事。例如,如果DAY_OF_MONTH字段为 31,则滚动到 2 月会将其设置为 28。此函数的GregorianCalendar版本会解决此问题。其他子类也应该提供这个函数的重写来做正确的事情。- 参数:
field- 日历字段。amount- 添加到日历field的已签名金额。- 自从:
- 1.2
- 参见:
-
setTimeZone
使用给定的时区值设置时区。- 参数:
value- 给定的时区。
-
getTimeZone
获取时区。- 返回:
- 与此日历关联的时区对象。
-
setLenient
public void setLenient(boolean lenient) 指定日期/时间解释是否宽松。在宽松的解释下,诸如“1996 年 2 月 942 日”之类的日期将被视为等同于 1996 年 2 月 1 日之后的第 941 天。在严格(非宽松)的解释下,此类日期将导致抛出异常。默认是宽松的。- 参数:
lenient-true如果要开启宽松模式;false如果要关闭它。- 参见:
-
isLenient
public boolean isLenient()告知日期/时间解释是否宽松。- 返回:
true如果这个日历的解释模式宽松;false否则。- 参见:
-
setFirstDayOfWeek
public void setFirstDayOfWeek(int value) 设置一周的第一天是什么;例如,SUNDAY在美国,MONDAY在法国。- 参数:
value- 给定的一周的第一天。- 参见:
-
getFirstDayOfWeek
public int getFirstDayOfWeek()获取一周的第一天是什么;例如,SUNDAY在美国,MONDAY在法国。- 返回:
- 一周的第一天。
- 参见:
-
setMinimalDaysInFirstWeek
public void setMinimalDaysInFirstWeek(int value) 设置一年中第一周所需的最少天数;例如,如果将第一周定义为包含一年第一个月的第一天的一周,则使用值 1 调用此方法。如果必须是整周,则使用值 7。- 参数:
value- 一年中第一周所需的给定最少天数。- 参见:
-
getMinimalDaysInFirstWeek
public int getMinimalDaysInFirstWeek()获取一年中第一周所需的最少天数;例如,如果第一周定义为包含一年第一个月的第一天的一周,则此方法返回 1。如果所需的最少天数必须是整周,则此方法返回 7。- 返回:
- 一年中第一周所需的最少天数。
- 参见:
-
isWeekDateSupported
public boolean isWeekDateSupported()返回此Calendar是否支持周日期。此方法的默认实现返回
false。- 返回:
true如果这个Calendar支持周日期;false否则。- 自从:
- 1.7
- 参见:
-
getWeekYear
public int getWeekYear()- 返回:
-
这个
Calendar的星期年 - 抛出:
UnsupportedOperationException- 如果此Calendar不支持任何周年编号。- 自从:
- 1.7
- 参见:
-
setWeekDate
public void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) 使用给定的日期说明符设置此Calendar的日期 - 年周、年中周和星期几。与
set方法不同,所有日历字段和time值都是在返回时计算的。如果
weekOfYear超出了weekYear中的有效星期范围,则weekYear和weekOfYear值将在宽松模式下进行调整,或者在非宽松模式下抛出IllegalArgumentException。此方法的默认实现抛出一个
UnsupportedOperationException。- 参数:
weekYear- 星期年weekOfYear- 基于weekYear的周数dayOfWeek- 星期几值:DAY_OF_WEEK字段的常量之一:SUNDAY,...,SATURDAY。- 抛出:
IllegalArgumentException- 如果任何给定的日期说明符无效或任何日历字段与非宽松模式下的给定日期说明符不一致UnsupportedOperationException- 如果此Calendar不支持任何周年编号。- 自从:
- 1.7
- 参见:
-
getWeeksInWeekYear
public int getWeeksInWeekYear()返回此Calendar表示的周年中的周数。此方法的默认实现抛出一个
UnsupportedOperationException。- 返回:
- 周年中的周数。
- 抛出:
UnsupportedOperationException- 如果此Calendar不支持任何周年编号。- 自从:
- 1.7
- 参见:
-
getMinimum
public abstract int getMinimum(int field) 返回此Calendar实例的给定日历字段的最小值。最小值定义为get方法为任何可能的时间值返回的最小值。最小值取决于实例的日历系统特定参数。- 参数:
field- 日历字段。- 返回:
- 给定日历字段的最小值。
- 参见:
-
getMaximum
public abstract int getMaximum(int field) 返回此Calendar实例的给定日历字段的最大值。最大值定义为get方法为任何可能的时间值返回的最大值。最大值取决于实例的日历系统特定参数。- 参数:
field- 日历字段。- 返回:
- 给定日历字段的最大值。
- 参见:
-
getGreatestMinimum
public abstract int getGreatestMinimum(int field) 返回此Calendar实例的给定日历字段的最高最小值。最高最小值定义为getActualMinimum(int)返回的任何可能时间值的最大值。最大最小值取决于实例的日历系统特定参数。- 参数:
field- 日历字段。- 返回:
- 给定日历字段的最高最小值。
- 参见:
-
getLeastMaximum
public abstract int getLeastMaximum(int field) 返回此Calendar实例的给定日历字段的最小最大值。最小最大值定义为getActualMaximum(int)为任何可能的时间值返回的最小值。最小最大值取决于实例的日历系统特定参数。例如,公历系统的Calendar为DAY_OF_MONTH字段返回28,因为28日是该日历最短月份的最后一天,即普通年份的二月。- 参数:
field- 日历字段。- 返回:
- 给定日历字段的最小最大值。
- 参见:
-
getActualMinimum
public int getActualMinimum(int field) 给定此Calendar的时间值,返回指定日历字段可能具有的最小值。此方法的默认实现使用迭代算法来确定日历字段的实际最小值。如果可能的话,子类应该用更有效的实现来覆盖它——在许多情况下,它们可以简单地返回
getMinimum()。- 参数:
field- 日历字段- 返回:
-
此
Calendar的时间值的给定日历字段的最小值 - 自从:
- 1.2
- 参见:
-
getActualMaximum
public int getActualMaximum(int field) 给定此Calendar的时间值,返回指定日历字段可能具有的最大值。例如MONTH字段的实际最大值在希伯来历系统中有的年份是12,有的年份是13。此方法的默认实现使用迭代算法来确定日历字段的实际最大值。如果可能的话,子类应该用更有效的实现来重写它。
- 参数:
field- 日历字段- 返回:
-
此
Calendar的时间值的给定日历字段的最大值 - 自从:
- 1.2
- 参见:
-
clone
创建并返回此对象的副本。 -
toString
返回此日历的字符串表示形式。此方法仅用于调试目的,返回字符串的格式可能因实现而异。返回的字符串可能为空,但可能不是null。 -
toInstant
将此对象转换为Instant。转换会创建一个
Instant,它表示时间线上与此Calendar相同的点。- 返回:
- 代表时间线上同一点的瞬间
- 自从:
- 1.8
-