Module java.base
Package java.util

Class Calendar

java.lang.Object
java.util.Calendar
所有已实现的接口:
Serializable, Cloneable, Comparable<Calendar>
直接已知的子类:
GregorianCalendar

public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable<Calendar>
Calendar类是一个抽象类,提供了在特定时间点和一组日历字段(如YEARMONTHDAY_OF_MONTHHOUR等)之间进行转换的方法,以及用于操作日历字段(例如获取下周的日期)的方法。时间点可以用距离纪元(Epoch)的毫秒值来表示,纪元是1970年1月1日00:00:00.000 GMT(公历)。该类还提供了额外的字段和方法,用于在包外实现具体的日历系统。这些字段和方法被定义为protected

与其他区域敏感类一样,Calendar提供了一个类方法getInstance,用于获取这种类型的通用对象。 CalendargetInstance方法返回一个Calendar对象,其日历字段已经初始化为当前日期和时间:

     Calendar rightNow = Calendar.getInstance();
 

Calendar对象可以生成实现特定语言和日历样式(例如日本-公历、日本-传统)的日期时间格式化所需的所有日历字段值。 Calendar定义了某些日历字段返回的值的范围,以及它们的含义。例如,所有日历系统的第一个月的值为MONTH == JANUARY。其他值由具体的子类定义,例如ERA。有关详细信息,请参阅各个字段的文档和子类文档。

获取和设置日历字段值

可以通过调用set方法来设置日历字段值。在Calendar中设置的任何字段值在需要计算其时间值(距离纪元的毫秒数)或日历字段值时不会被解释。调用getgetTimeInMillisgetTimeaddroll会涉及这种计算。除非另有说明,否则任何包含参数int fieldCalendar方法如果指定的字段超出范围(field < 0 || field >= FIELD_COUNT)将抛出ArrayIndexOutOfBoundsException

宽松性

Calendar有两种解释日历字段的模式,即宽松非宽松。当Calendar处于宽松模式时,它接受比其生成的更广泛范围的日历字段值。当Calendar重新计算要由get()返回的日历字段值时,所有日历字段都会被标准化。例如,宽松的GregorianCalendarMONTH == JANUARYDAY_OF_MONTH == 32解释为2月1日。

Calendar处于非宽松模式时,如果其日历字段存在任何不一致,它会抛出异常。例如,GregorianCalendar始终生成介于1和月份长度之间的DAY_OF_MONTH值。非宽松的GregorianCalendar在计算其时间或日历字段值时,如果设置了任何超出范围的字段值,将抛出异常。

第一周

Calendar使用两个参数定义了一个特定区域的七天周:一周的第一天和第一周的最小天数(从1到7)。这些数字来自区域资源数据或构造Calendar时的区域本身。如果指定的区域包含"fw"和/或"rg" Unicode扩展,则将根据这些扩展获取一周的第一天。如果同时指定了"fw"和"rg",则来自"fw"扩展的值将取代"rg"扩展的隐含值。它们也可以通过设置它们的值的方法明确指定。

在设置或获取WEEK_OF_MONTHWEEK_OF_YEAR字段时,Calendar必须确定月份或年份的第一周作为参考点。一个月或一年的第一周被定义为从getFirstDayOfWeek()开始并包含该月或年至少getMinimalDaysInFirstWeek()天的最早七天时期。编号为..., -1, 0的周在第一周之前;编号为2, 3,...的周在第一周之后。请注意,get()返回的标准化编号可能不同。例如,特定的Calendar子类可能将一年中第一周之前的周指定为上一年的第n周。

日历字段解析

在从日历字段计算日期和时间时,可能存在计算不足的信息(例如只有年和月而没有日期),或存在不一致的信息(例如1996年7月15日(公历)是星期二,而实际上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中,字段的默认值与纪元开始时的值相同:即YEAR = 1970MONTH = JANUARYDAY_OF_MONTH = 1等。

注意:在解释某些特定时间的情况下可能存在一些歧义,这些歧义通过以下方式解决:

  1. 23:59是一天中的最后一分钟,00:00是第二天的第一分钟。因此,1999年12月31日23:59 < 2000年1月1日00:00 < 2000年1月1日00:01。
  2. 尽管在历史上不太精确,午夜也属于"上午",中午属于"下午",因此在同一天中,12:00 am(午夜)< 12:01 am,12:00 pm(中午)< 12:01 pm

日期或时间格式字符串不是日历定义的一部分,因为这些字符串必须在运行时由用户进行修改或覆盖。使用DateFormat来格式化日期。

字段操作

可以使用三种方法更改日历字段:set()add()roll()

set(f, value)将日历字段f更改为value。此外,它设置一个内部成员变量以指示日历字段f已更改。尽管日历字段f立即更改,但直到下一次调用get()getTime()getTimeInMillis()add()roll()时,日历的时间值(毫秒)才会重新计算。因此,多次调用set()不会触发多次不必要的计算。由于使用set()更改日历字段,其他日历字段可能会改变,具体取决于日历字段、日历字段值和日历系统。此外,在重新计算日历字段后,get(f)不一定会返回set方法调用后的value。具体情况由具体的日历类确定。

示例:考虑一个最初设置为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)并进行两个调整:

添加规则1。调用后字段f的值减去调用前字段f的值为delta,模除任何字段f中发生的溢出。当字段值超出其范围时会发生溢出,结果是下一个较大的字段会递增或递减,并且字段值会调整回其范围内。

添加规则2。如果预期较小的字段应保持不变,但由于更改字段f后其最小值或最大值发生变化或其他约束(例如时区偏移更改)而不可能等于其先前值,则其值将调整为尽可能接近其预期值。较小字段表示较小的时间单位。 HOUR是比DAY_OF_MONTH更小的字段。对于不希望保持不变的较小字段不进行调整。日历系统确定哪些字段预计是不变的。

此外,与set()不同,add()会立即强制重新计算日历的毫秒和所有字段。

示例:考虑一个最初设置为1999年8月31日的GregorianCalendar。调用add(Calendar.MONTH, 13)将日历设置为2000年9月30日。 添加规则1MONTH字段设置为9月,因为在8月加上13个月会得到下一年的9月。由于在GregorianCalendar中9月不能有31天,添加规则2DAY_OF_MONTH设置为30,最接近的可能值。尽管DAY_OF_WEEK是一个较小的字段,但在GregorianCalendar中,当月份更改时,预计DAY_OF_WEEK会发生变化,因此不会通过规则2进行调整。

roll(f, delta)delta添加到字段f,而不更改较大的字段。这相当于调用add(f, delta)并进行以下调整:

滚动规则。调用后较大的字段保持不变。较大的字段表示较大的时间单位。 DAY_OF_MONTHHOUR更大。

示例:参见GregorianCalendar.roll(int, int)

使用模型。为了激励add()roll()的行为,考虑一个用户界面组件,其中有用于月份、日期和年份的增加和减少按钮,以及一个底层的GregorianCalendar。如果界面显示为1999年1月31日,用户按下月份增加按钮,应该显示什么?如果底层实现使用set(),可能会显示为1999年3月3日。更好的结果应该是1999年2月28日。此外,如果用户再次按下月份增加按钮,应该显示为1999年3月31日,而不是1999年3月28日。通过保存原始日期并根据是否应该影响更大字段来使用add()roll(),用户界面可以表现为大多数用户直觉地期望的方式。

自 JDK 版本:
1.1
参见:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    Calendar.Builder 用于根据各种日期时间参数创建 Calendar
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    用于 getDisplayNames 的样式说明符,指示所有样式中的名称,例如 "January" 和 "Jan"。
    static final int
    AM
    AM_PM 字段的值,指示一天中从午夜到中午前的时段。
    static final int
    getset 的字段编号,指示 HOUR 是上午还是下午。
    static final int
    MONTH 字段的值,指示格里高利历和儒略历中的第四个月。
    protected boolean
    如果 fields[] 与当前设置的时间同步,则为 True。
    static final int
    MONTH 字段的值,指示格里高利历和儒略历中的第八个月。
    static final int
    getset 的字段编号,指示月份的日期。
    static final int
    getset 的字段编号,指示月份的日期。
    static final int
    getset 的字段编号,指示星期几。
    static final int
    getset 的字段编号,指示当前月份内星期几的序数。
    static final int
    getset 的字段编号,指示当前年份内的日期编号。
    static final int
    MONTH 字段的值,指示格里高利历和儒略历中的第十二个月。
    static final int
    getset 的字段编号,指示毫秒级的夏令时偏移量。
    static final int
    ERA
    getset 的字段编号,指示纪元,例如儒略历中的 AD 或 BC。
    static final int
    MONTH 字段的值,指示格里高利历和儒略历中的第二个月。
    static final int
    getset 识别的不同字段数量。
    protected int[]
    此日历的当前设置时间的日历字段值。
    static final int
    DAY_OF_WEEK 字段的值,指示星期五。
    static final int
    getset 的字段编号,指示上午或下午的小时。
    static final int
    getset 的字段编号,指示一天中的小时。
    protected boolean[]
    告知日历的指定日历字段是否已设置的标志。
    protected boolean
    如果 time 的值有效,则为 True。
    static final int
    MONTH 字段的值,指示格里高利历和儒略历中的第一个月。
    static final int
    MONTH 字段的值,指示格里高利历和儒略历中的第七个月。
    static final int
    MONTH 字段的值,指示格里高利历和儒略历中的第六个月。
    static final int
    用于 getDisplayNamegetDisplayNames 的样式说明符,等同于 LONG_FORMAT
    static final int
    用于 getDisplayNamegetDisplayNames 的样式说明符,指示用于格式的长名称。
    static final int
    用于 getDisplayNamegetDisplayNames 的样式说明符,指示独立使用的长名称,例如作为日历标题的月份名称。
    static final int
    MONTH 字段的值,指示格里高利历和儒略历中的第三个月。
    static final int
    MAY
    MONTH 字段的值,指示格里高利历和儒略历中的第五个月。
    static final int
    getset 的字段编号,指示秒内的毫秒数。
    static final int
    getset 的字段编号,指示小时内的分钟数。
    static final int
    DAY_OF_WEEK 字段的值,指示星期一。
    static final int
    getset 的字段编号,指示月份。
    static final int
    用于 getDisplayNamegetDisplayNames 的样式说明符,指示用于格式的狭窄名称。
    static final int
    用于 getDisplayNamegetDisplayNames 的样式说明符,指示独立使用的狭窄名称。
    static final int
    MONTH 字段的值,指示格里高利历和儒略历中的第十一个月。
    static final int
    MONTH 字段的值,指示格里高利历和儒略历中的第十个月。
    static final int
    PM
    AM_PM 字段的值,指示一天中从中午到午夜前的时段。
    static final int
    DAY_OF_WEEK 字段的值,指示星期六。
    static final int
    getset 的字段编号,指示分钟内的秒数。
    static final int
    MONTH 字段的值,指示格里高利历和儒略历中的第九个月。
    static final int
    用于 getDisplayNamegetDisplayNames 的样式说明符,等同于 SHORT_FORMAT
    static final int
    用于 getDisplayNamegetDisplayNames 的样式说明符,指示用于格式的短名称。
    static final int
    用于 getDisplayNamegetDisplayNames 的样式说明符,指示独立使用的短名称,例如作为日历标题的月份缩写。
    static final int
    DAY_OF_WEEK 字段的值,指示星期日。
    static final int
    DAY_OF_WEEK 字段的值,指示星期四。
    protected long
    此日历的当前设置时间,表示为格林尼治时间 1970 年 1 月 1 日 0 时 0 分 0 秒后的毫秒数。
    static final int
    DAY_OF_WEEK 字段的值,指示星期二。
    static final int
    MONTH 字段的值,指示一年中的第十三个月。
    static final int
    DAY_OF_WEEK 字段的值,指示星期三。
    static final int
    getset 的字段编号,指示当前月份内的周数。
    static final int
    getset 的字段编号,指示当前年份内的周数。
    static final int
    getset 的字段编号,指示年份。
    static final int
    getset 的字段编号,指示与格林尼治时间的原始偏移量(毫秒)。
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    使用默认时区和默认 FORMAT 区域设置构造一个日历。
    protected
    Calendar(TimeZone zone, Locale aLocale)
    使用指定的时区和区域设置构造一个日历。
  • Method Summary

    Modifier and Type
    Method
    Description
    abstract void
    add(int field, int amount)
    根据日历的规则,向给定的日历字段添加或减去指定的时间量。
    boolean
    after(Object when)
    返回此 Calendar 是否表示晚于指定 Object 表示的时间。
    boolean
    before(Object when)
    返回此 Calendar 是否表示早于指定 Object 表示的时间。
    final void
    clear()
    设置此 Calendar 的所有日历字段值和时间值(相对于 Epoch 的毫秒偏移量)为未定义状态。
    final void
    clear(int field)
    设置此 Calendar 的给定日历字段值和时间值(相对于 Epoch 的毫秒偏移量)为未定义状态。
    clone()
    创建并返回此对象的副本。
    int
    compareTo(Calendar anotherCalendar)
    比较两个 Calendar 对象表示的时间值(相对于 Epoch 的毫秒偏移量)。
    protected void
    填充日历字段中的任何未设置字段。
    protected abstract void
    将当前毫秒时间值 time 转换为 fields[] 中的日历字段值。
    protected abstract void
    将当前日历字段值在fields[]中转换为毫秒时间值time
    boolean
    equals(Object obj)
    将此Calendar与指定的Object进行比较。
    int
    get(int field)
    返回给定日历字段的值。
    int
    getActualMaximum(int field)
    返回此Calendar的时间值给定时的指定日历字段可能具有的最大值。
    int
    getActualMinimum(int field)
    返回此Calendar的时间值给定时的指定日历字段可能具有的最小值。
    static Set<String>
    返回一个包含运行时环境中Calendar支持的所有日历类型的不可修改的Set
    static Locale[]
    返回此类的getInstance方法可以返回本地化实例的所有区域设置的数组。
    返回此Calendar的日历类型。
    getDisplayName(int field, int style, Locale locale)
    返回给定stylelocale中的日历field值的字符串表示形式。
    getDisplayNames(int field, int style, Locale locale)
    返回一个包含给定stylelocale中日历field的所有名称及其相应字段值的Map
    int
    获取一周中的第一天是哪一天;例如,在美国是SUNDAY,在法国是MONDAY
    abstract int
    getGreatestMinimum(int field)
    返回此Calendar实例给定日历字段的最高最小值。
    static Calendar
    使用默认时区和区域设置获取一个日历。
    static Calendar
    getInstance(Locale aLocale)
    使用默认时区和指定区域设置获取一个日历。
    static Calendar
    使用指定时区和默认区域设置获取一个日历。
    static Calendar
    getInstance(TimeZone zone, Locale aLocale)
    使用指定时区和区域设置获取一个日历。
    abstract int
    getLeastMaximum(int field)
    返回此Calendar实例给定日历字段的最低最大值。
    abstract int
    getMaximum(int field)
    返回此Calendar实例给定日历字段的最大值。
    int
    获取一年中第一周需要的最少天数;例如,如果第一周被定义为包含一年中第一个月的第一天的周,则此方法返回1。
    abstract int
    getMinimum(int field)
    返回此Calendar实例给定日历字段的最小值。
    final Date
    返回表示此Calendar时间值(距离Epoch的毫秒偏移量)的Date对象。
    long
    返回此日历的时间值(毫秒)。
    获取时区。
    int
    返回此Calendar表示的周年中的周数。
    int
    返回此Calendar表示的周年。
    int
    返回此日历的哈希码。
    protected final int
    internalGet(int field)
    返回给定日历字段的值。
    boolean
    告知日期/时间解释是否要宽松。
    final boolean
    isSet(int field)
    确定给定日历字段是否已设置值,包括通过get方法调用触发的内部字段计算设置的情况。
    boolean
    返回此Calendar是否支持周日期。
    abstract void
    roll(int field, boolean up)
    在不更改较大字段的情况下,添加或减去给定时间字段上的单个时间单位(上/下)。
    void
    roll(int field, int amount)
    在不更改较大字段的情况下,将指定的(有符号)数量添加到指定的日历字段。
    void
    set(int field, int value)
    将给定的日历字段设置为给定值。
    final void
    set(int year, int month, int date)
    设置日历字段YEARMONTHDAY_OF_MONTH的值。
    final void
    set(int year, int month, int date, int hourOfDay, int minute)
    设置日历字段YEARMONTHDAY_OF_MONTHHOUR_OF_DAYMINUTE的值。
    final void
    set(int year, int month, int date, int hourOfDay, int minute, int second)
    设置字段YEARMONTHDAY_OF_MONTHHOUR_OF_DAYMINUTESECOND的值。
    void
    setFirstDayOfWeek(int value)
    设置一周中的第一天是哪一天;例如,在美国是SUNDAY,在法国是MONDAY
    void
    setLenient(boolean lenient)
    指定日期/时间解释是否要宽松。
    void
    设置一年中第一周需要的最少天数;例如,如果第一周被定义为包含一年中第一个月的第一天的周,则调用此方法并传入值1。
    final void
    setTime(Date date)
    使用给定的Date设置此日历的时间。
    void
    setTimeInMillis(long millis)
    使用给定的长整型值设置此日历的当前时间。
    void
    使用给定的时区值设置时区。
    void
    setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)
    使用给定的日期标识符 - 周年、周数和星期几 - 设置此Calendar的日期。
    final Instant
    将此对象转换为一个Instant
    返回此日历的字符串表示形式。

    Methods declared in class java.lang.Object

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • ERA

      public static final int ERA
      getset的字段编号,指示纪元,例如,公元或公元前在儒略历中。这是一个特定于日历的值;请参阅子类文档。
      参见:
    • YEAR

      public static final int YEAR
      getset的字段编号,指示年份。这是一个特定于日历的值;请参阅子类文档。
      参见:
    • MONTH

      public static final int MONTH
      getset的字段编号,指示月份。这是一个特定于日历的值。儒略历和公历中的第一个月是JANUARY,为0;最后一个月取决于一年中的月份数。
      参见:
    • WEEK_OF_YEAR

      public static final int WEEK_OF_YEAR
      getset的字段编号,指示当前年份内的周数。由getFirstDayOfWeek()getMinimalDaysInFirstWeek()定义的一年中的第一周的值为1。子类为一年中第一周之前的天定义WEEK_OF_YEAR的值。
      参见:
    • WEEK_OF_MONTH

      public static final int WEEK_OF_MONTH
      getset的字段编号,指示当前月份内的周数。由getFirstDayOfWeek()getMinimalDaysInFirstWeek()定义的一个月中的第一周的值为1。子类为一个月中第一周之前的天定义WEEK_OF_MONTH的值。
      参见:
    • DATE

      public static final int DATE
      getset的字段编号,指示月份中的日期。这是DAY_OF_MONTH的同义词。一个月的第一天的值为1。
      参见:
    • DAY_OF_MONTH

      public static final int DAY_OF_MONTH
      getset的字段编号,指示月份中的日期。这是DATE的同义词。一个月的第一天的值为1。
      参见:
    • DAY_OF_YEAR

      public static final int DAY_OF_YEAR
      getset的字段编号,指示当前年份中的日期。一年的第一天的值为1。
      参见:
    • DAY_OF_WEEK

      public static final int DAY_OF_WEEK
      getset的字段编号,指示星期几。如果日历是非宽松的,则此字段取值为SUNDAYMONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAYSATURDAY。否则,任何int值都将被接受并规范化为前面提到的值之一。
      参见:
    • DAY_OF_WEEK_IN_MONTH

      public static final int DAY_OF_WEEK_IN_MONTH
      getset的字段编号,指示当前月份内星期几的序数。与DAY_OF_WEEK字段一起,这唯一指定了一个月内的某一天。与WEEK_OF_MONTHWEEK_OF_YEAR不同,此字段的值不依赖于getFirstDayOfWeek()getMinimalDaysInFirstWeek()DAY_OF_MONTH 17始终对应于DAY_OF_WEEK_IN_MONTH 1814对应于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_PM
      getset的字段编号,指示HOUR是上午还是下午。例如,在下午10:04:15.250,AM_PMPM
      参见:
    • HOUR

      public static final int HOUR
      getset的字段编号,指示上午或下午的小时数。HOUR用于12小时制(0-11)。中午和午夜由0表示,而不是12。例如,在下午10:04:15.250,HOUR是10。
      参见:
    • HOUR_OF_DAY

      public static final int HOUR_OF_DAY
      getset的字段编号,指示一天中的小时数。HOUR_OF_DAY用于24小时制。例如,在下午10:04:15.250,HOUR_OF_DAY是22。
      参见:
    • MINUTE

      public static final int MINUTE
      getset的字段编号,指示小时内的分钟数。例如,在下午10:04:15.250,MINUTE是4。
      参见:
    • SECOND

      public static final int SECOND
      getset的字段编号,指示分钟内的秒数。例如,在下午10:04:15.250,SECOND是15。
      参见:
    • MILLISECOND

      public static final int MILLISECOND
      getset的字段编号,指示秒内的毫秒数。例如,在下午10:04:15.250,MILLISECOND是250。
      参见:
    • ZONE_OFFSET

      public static final int ZONE_OFFSET
      getset的字段编号,指示与GMT的原始偏移量(以毫秒为单位)。

      如果TimeZone实现子类支持历史GMT偏移更改,则此字段反映此Calendar的时区的正确GMT偏移值。

      参见:
    • DST_OFFSET

      public static final int DST_OFFSET
      getset的字段编号,指示夏令时偏移量(以毫秒为单位)。

      如果TimeZone实现子类支持历史夏令时时间表更改,则此字段反映此Calendar的时区的正确夏令时偏移值。

      参见:
    • FIELD_COUNT

      public static final int FIELD_COUNT
      getset识别的字段数量。字段编号范围为0..FIELD_COUNT-1
      参见:
    • SUNDAY

      public static final int SUNDAY
      DAY_OF_WEEK字段的值,表示星期日。
      参见:
    • MONDAY

      public static final int MONDAY
      DAY_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 SATURDAY
      DAY_OF_WEEK字段的值,表示星期六。
      参见:
    • JANUARY

      public static final int JANUARY
      MONTH字段的值,表示公历和儒略历中一年中的第一个月。
      参见:
    • FEBRUARY

      public static final int FEBRUARY
      MONTH字段的值,表示公历和儒略历中一年中的第二个月。
      参见:
    • MARCH

      public static final int MARCH
      MONTH字段的值,表示公历和儒略历中一年中的第三个月。
      参见:
    • APRIL

      public static final int APRIL
      MONTH字段的值,表示公历和儒略历中一年中的第四个月。
      参见:
    • MAY

      public static final int MAY
      MONTH字段的值,表示公历和儒略历中一年中的第五个月。
      参见:
    • JUNE

      public static final int JUNE
      MONTH字段的值,表示公历和儒略历中一年中的第六个月。
      参见:
    • JULY

      public static final int JULY
      MONTH字段的值,表示公历和儒略历中一年中的第七个月。
      参见:
    • AUGUST

      public static final int AUGUST
      MONTH字段的值,表示公历和儒略历中一年中的第八个月。
      参见:
    • SEPTEMBER

      public static final int SEPTEMBER
      MONTH字段的值,表示公历和儒略历中一年中的第九个月。
      参见:
    • OCTOBER

      public static final int OCTOBER
      MONTH字段的值,表示公历和儒略历中一年中的第十个月。
      参见:
    • NOVEMBER

      public static final int NOVEMBER
      Value of the MONTH field indicating the eleventh month of the year in the Gregorian and Julian calendars.
      See Also:
    • DECEMBER

      public static final int DECEMBER
      Value of the MONTH field indicating the twelfth month of the year in the Gregorian and Julian calendars.
      See Also:
    • UNDECIMBER

      public static final int UNDECIMBER
      Value of the MONTH field indicating the thirteenth month of the year. Although GregorianCalendar does not use this value, lunar calendars do.
      See Also:
    • AM

      public static final int AM
      Value of the AM_PM field indicating the period of the day from midnight to just before noon.
      See Also:
    • PM

      public static final int PM
      Value of the AM_PM field indicating the period of the day from noon to just before midnight.
      See Also:
    • ALL_STYLES

      public static final int ALL_STYLES
      A style specifier for getDisplayNames indicating names in all styles, such as "January" and "Jan".
      Since:
      1.6
      See Also:
    • SHORT

      public static final int SHORT
      A style specifier for getDisplayName and getDisplayNames equivalent to SHORT_FORMAT.
      Since:
      1.6
      See Also:
    • LONG

      public static final int LONG
      A style specifier for getDisplayName and getDisplayNames equivalent to LONG_FORMAT.
      Since:
      1.6
      See Also:
    • NARROW_FORMAT

      public static final int NARROW_FORMAT
      A style specifier for getDisplayName and getDisplayNames indicating a narrow name used for format. Narrow names are typically single character strings, such as "M" for Monday.
      Since:
      1.8
      See Also:
    • NARROW_STANDALONE

      public static final int NARROW_STANDALONE
      A style specifier for getDisplayName and getDisplayNames indicating a narrow name independently. Narrow names are typically single character strings, such as "M" for Monday.
      Since:
      1.8
      See Also:
    • SHORT_FORMAT

      public static final int SHORT_FORMAT
      A style specifier for getDisplayName and getDisplayNames indicating a short name used for format.
      Since:
      1.8
      See Also:
    • LONG_FORMAT

      public static final int LONG_FORMAT
      A style specifier for getDisplayName and getDisplayNames indicating a long name used for format.
      Since:
      1.8
      See Also:
    • SHORT_STANDALONE

      public static final int SHORT_STANDALONE
      A style specifier for getDisplayName and getDisplayNames indicating a short name used independently, such as a month abbreviation as calendar headers.
      Since:
      1.8
      See Also:
    • LONG_STANDALONE

      public static final int LONG_STANDALONE
      A style specifier for getDisplayName and getDisplayNames indicating a long name used independently, such as a month name as calendar headers.
      Since:
      1.8
      See Also:
    • fields

      protected int[] fields
      The calendar field values for the currently set time for this calendar. This is an array of FIELD_COUNT integers, with index values ERA through DST_OFFSET.
    • isSet

      protected boolean[] isSet
      The flags which tell if a specified calendar field for the calendar is set. A new object has no fields set. After the first call to a method which generates the fields, they all remain set after that. This is an array of FIELD_COUNT booleans, with index values ERA through DST_OFFSET.
    • time

      protected long time
      The currently set time for this calendar, expressed in milliseconds after January 1, 1970, 0:00:00 GMT.
      See Also:
    • isTimeSet

      protected boolean isTimeSet
      True if then the value of time is valid. The time is made invalid by a change to an item of field[].
      See Also:
    • areFieldsSet

      protected boolean areFieldsSet
      True if fields[] are in sync with the currently set time. If false, then the next attempt to get the value of a field will force a recomputation of all fields from the current value of time.
  • Constructor Details

    • Calendar

      protected Calendar()
      Constructs a Calendar with the default time zone and the default FORMAT locale.
      See Also:
    • Calendar

      protected Calendar(TimeZone zone, Locale aLocale)
      Constructs a calendar with the specified time zone and locale.
      Parameters:
      zone - the time zone to use
      aLocale - the locale for the week data
  • Method Details

    • getInstance

      public static Calendar getInstance()
      Gets a calendar using the default time zone and locale. The Calendar returned is based on the current time in the default time zone with the default FORMAT locale.

      If the locale contains the time zone with "tz" Unicode extension, that time zone is used instead.

      Returns:
      a Calendar.
    • getInstance

      public static Calendar getInstance(TimeZone zone)
      Gets a calendar using the specified time zone and default locale. The Calendar returned is based on the current time in the given time zone with the default FORMAT locale.
      Parameters:
      zone - the time zone to use
      Returns:
      a Calendar.
      Throws:
      NullPointerException - if zone is null
    • getInstance

      public static Calendar getInstance(Locale aLocale)
      获取使用默认时区和指定区域设置的日历。返回的Calendar基于默认时区中的当前时间和给定区域设置。

      如果区域设置包含带有"tz"的时区Unicode扩展,则使用该时区。

      参数:
      aLocale - 用于周数据的区域设置
      返回:
      一个日历。
      抛出:
      NullPointerException - 如果aLocalenull
    • getInstance

      public static Calendar getInstance(TimeZone zone, Locale aLocale)
      获取具有指定时区和区域设置的日历。返回的Calendar基于给定时区中的当前时间和给定区域设置。
      参数:
      zone - 要使用的时区
      aLocale - 用于周数据的区域设置
      返回:
      一个日历。
      抛出:
      NullPointerException - 如果zoneaLocalenull
    • getAvailableLocales

      public static Locale[] getAvailableLocales()
      返回所有区域设置的数组,该类的getInstance方法可以返回本地化实例。至少,返回的数组必须包含等于Locale.ROOT和等于Locale.USLocale实例。
      返回:
      可用于本地化Calendar实例的区域设置数组。
    • computeTime

      protected abstract void computeTime()
      fields[]中的当前日历字段值转换为毫秒时间值time
      参见:
    • computeFields

      protected abstract void computeFields()
      将当前毫秒时间值time转换为日历字段值fields[]。这允许您将日历字段值与为日历设置的新时间同步。首先不会重新计算时间;要重新计算时间,然后字段,请调用complete()方法。
      参见:
    • getTime

      public final Date getTime()
      返回表示此Calendar时间值(相对于Epoch的毫秒偏移量)的Date对象。
      返回:
      代表时间值的Date
      参见:
    • setTime

      public final void setTime(Date date)
      使用给定的Date设置此日历的时间。

      注意:使用Date(Long.MAX_VALUE)Date(Long.MIN_VALUE)调用setTime()可能会导致get()返回不正确的字段值。

      参数:
      date - 给定的日期。
      抛出:
      NullPointerException - 如果datenull
      参见:
    • getTimeInMillis

      public long getTimeInMillis()
      以毫秒为单位返回此日历的时间值。
      返回:
      从纪元开始的当前时间的UTC毫秒数。
      参见:
    • setTimeInMillis

      public void setTimeInMillis(long millis)
      从给定的长整型值设置此日历的当前时间。
      参数:
      millis - 从纪元开始的UTC毫秒数的新时间。
      参见:
    • get

      public int get(int field)
      返回给定日历字段的值。在宽松模式下,所有日历字段都会被规范化。在非宽松模式下,所有日历字段都会被验证,如果任何日历字段具有超出范围的值,则此方法会抛出异常。规范化和验证由complete()方法处理,该过程依赖于日历系统。
      参数:
      field - 给定的日历字段。
      返回:
      给定日历字段的值。
      抛出:
      IllegalArgumentException - 如果此Calendar为非宽松模式且任何日历字段具有无效值。
      参见:
    • internalGet

      protected final int internalGet(int field)
      返回给定日历字段的值。此方法不涉及字段值的规范化或验证。
      参数:
      field - 给定的日历字段。
      返回:
      给定日历字段的值。
      参见:
    • set

      public void set(int field, int value)
      将给定的日历字段设置为给定值。无论宽松模式如何,此方法都不会解释值。
      参数:
      field - 给定的日历字段。
      value - 要为给定日历字段设置的值。
      参见:
    • set

      public final void set(int year, int month, int date)
      设置日历字段YEARMONTHDAY_OF_MONTH的值。保留其他日历字段的先前值。如果不需要这样做,请先调用clear()
      参数:
      year - 用于设置YEAR日历字段的值。
      month - 用于设置MONTH日历字段的值。月份值是基于0的。例如,1代表一月。
      date - 用于设置DAY_OF_MONTH日历字段的值。
      参见:
    • set

      public final void set(int year, int month, int date, int hourOfDay, int minute)
      设置日历字段YEARMONTHDAY_OF_MONTHHOUR_OF_DAYMINUTE的值。保留其他字段的先前值。如果不需要这样做,请先调用clear()
      参数:
      year - 用于设置YEAR日历字段的值。
      month - 用于设置MONTH日历字段的值。月份值是基于0的。例如,1代表一月。
      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)
      设置字段YEARMONTHDAY_OF_MONTHHOUR_OF_DAYMINUTESECOND的值。保留其他字段的先前值。如果不需要这样做,请先调用clear()
      参数:
      year - 用于设置YEAR日历字段的值。
      month - 用于设置MONTH日历字段的值。月份值是基于0的。例如,1代表一月。
      date - 用于设置DAY_OF_MONTH日历字段的值。
      hourOfDay - 用于设置HOUR_OF_DAY日历字段的值。
      minute - 用于设置MINUTE日历字段的值。
      second - 用于设置SECOND日历字段的值。
      参见:
    • clear

      public final void clear()
      设置所有日历字段值和此Calendar的时间值(相对于Epoch的毫秒偏移量)为未定义。这意味着对所有日历字段,isSet()将返回false,日期和时间计算将处理字段,就好像它们从未被设置过一样。一个Calendar实现类可以使用其特定的默认字段值进行日期/时间计算。例如,如果YEAR字段值未定义,则GregorianCalendar使用1970年。
      参见:
    • clear

      public final void clear(int field)
      设置给定的日历字段值和此Calendar的时间值(距离Epoch的毫秒偏移量)未定义。这意味着isSet(field)将返回false,日期和时间计算将把该字段视为从未设置过。 Calendar实现类可以使用字段的特定默认值进行日期和时间计算。

      HOUR_OF_DAYHOURAM_PM字段是独立处理的,并且应用一天中时间的分辨率规则。清除其中一个字段不会重置此Calendar的小时值。使用set(Calendar.HOUR_OF_DAY, 0)来重置小时值。

      参数:
      field - 要清除的日历字段。
      参见:
    • isSet

      public final boolean isSet(int field)
      确定给定的日历字段是否已设置值,包括通过get方法调用触发的内部字段计算设置的情况。
      参数:
      field - 要测试的日历字段
      返回:
      如果给定的日历字段已设置值,则返回true;否则返回false
    • getDisplayName

      public String getDisplayName(int field, int style, Locale locale)
      返回给定stylelocale中日历field值的字符串表示。如果不适用字符串表示,则返回null。如果字符串表示适用于给定的日历field,则此方法调用get(field)来获取日历field值。

      例如,如果此CalendarGregorianCalendar,其日期为2005-01-01,则在英语区域设置中,MONTH字段的字符串表示将是长样式下的"January"或短样式下的"Jan"。然而,DAY_OF_MONTH字段不会有字符串表示可用,此方法将返回null

      默认实现支持具有给定locale中名称的日历字段的DateFormatSymbols

      如果Calendar field没有字符串表示,并且日历处于非宽松模式且任何日历字段具有无效值,则返回null。如果Calendar field有字符串表示,并且日历处于非宽松模式且任何日历字段具有无效值,则将抛出IllegalArgumentException

      参数:
      field - 要返回字符串表示的日历字段
      style - 应用于字符串表示的样式之一;SHORT_FORMATSHORT)、SHORT_STANDALONELONG_FORMATLONG)、LONG_STANDALONENARROW_FORMATNARROW_STANDALONE之一。
      locale - 字符串表示的区域设置(由locale指定的任何日历类型将被忽略)
      返回:
      给定stylefield的字符串表示,如果不适用字符串表示则返回null
      抛出:
      IllegalArgumentException - 如果fieldstyle无效,或者此Calendar为非宽松模式且任何日历字段具有无效值
      NullPointerException - 如果locale为null
      自:
      1.6
    • getDisplayNames

      public Map<String,Integer> getDisplayNames(int field, int style, Locale locale)
      返回一个包含给定stylelocale中所有日历field名称及其相应字段值的Map。例如,如果此Calendar是一个GregorianCalendar,返回的映射将包含英语区域设置中短样式下的"Jan"到JANUARY,"Feb"到FEBRUARY等。

      由于使用单个字符,狭窄名称可能不是唯一的,例如"Sunday"和"Saturday"都用"S"表示。在这种情况下,狭窄名称不包括在返回的Map中。

      其他日历字段的值可能会考虑以确定一组显示名称。例如,如果此Calendar是一个阴阳历系统,并且由YEAR字段给出的年份值有一个闰月,此方法将返回包含闰月名称的月份名称,并且月份名称将映射到特定于该年份的值。

      默认实现支持包含在DateFormatSymbols中的显示名称。例如,如果fieldMONTHstyleALL_STYLES,此方法返回一个Map,其中包含DateFormatSymbols.getShortMonths()DateFormatSymbols.getMonths()返回的所有字符串。

      getDisplayName(int, int, Locale)不同,如果Calendar为非宽松模式且任何日历字段具有无效值,则此方法不会抛出IllegalArgumentException。相反,此方法将返回null或一个Map

      参数:
      field - 要返回显示名称的日历字段
      style - 应用于字符串表示的样式之一;SHORT_FORMATSHORT)、SHORT_STANDALONELONG_FORMATLONG)、LONG_STANDALONENARROW_FORMATNARROW_STANDALONE之一
      locale - 显示名称的区域设置
      返回:
      包含所有stylelocale中显示名称及其字段值的Map,如果field没有定义显示名称,则返回null
      抛出:
      IllegalArgumentException - 如果fieldstyle无效
      NullPointerException - 如果locale为null
      自:
      1.6
    • complete

      protected void complete()
      填充日历字段中的任何未设置字段。首先,如果时间值(距离Epoch的毫秒偏移量)尚未从日历字段值计算出来,则调用computeTime()方法。然后,调用computeFields()方法来计算所有日历字段值。
    • getAvailableCalendarTypes

      public static Set<String> getAvailableCalendarTypes()
      返回一个包含运行时环境中Calendar支持的所有日历类型的不可修改的Set。可用的日历类型可用于Unicode区域设置扩展。返回的Set至少包含"gregory"。日历类型不包括别名,例如"gregorian"代表"gregory"
      返回:
      包含所有可用日历类型的不可修改Set
      自:
      1.8
      参见:
    • getCalendarType

      public String getCalendarType()
      返回此Calendar的日历类型。日历类型由Unicode区域设置数据标记语言(LDML)规范定义。

      此方法的默认实现返回此Calendar实例的类名。任何实现LDML定义的日历系统的子类应该重写此方法以返回适当的日历类型。

      返回:
      LDML定义的日历类型或此Calendar实例的类名
      自:
      1.8
      参见:
    • equals

      public boolean equals(Object obj)
      将此Calendar与指定的Object进行比较。仅当参数是表示相同时间值(距离Epoch的毫秒偏移量)的相同日历系统的Calendar对象,并且在相同Calendar参数下时,结果为true

      Calendar参数是由isLenientgetFirstDayOfWeekgetMinimalDaysInFirstWeekgetTimeZone方法表示的值。如果两个Calendar之间的这些参数有任何差异,则此方法返回false

      使用compareTo方法仅比较时间值。

      覆盖:
      equals 在类 Object
      参数:
      obj - 要比较的对象。
      返回:
      如果此对象等于obj,则返回true; 否则返回false
      参见:
    • hashCode

      public int hashCode()
      返回此日历的哈希码。
      覆盖:
      hashCode 在类 Object
      返回:
      此对象的哈希码值。
      自:
      1.2
      参见:
    • before

      public boolean before(Object when)
      返回此Calendar是否表示早于指定Object所表示时间的时间。此方法等效于:
      
               compareTo(when) < 0
       
      当且仅当whenCalendar实例时。否则,该方法返回false
      参数:
      when - 要比较的Object
      返回:
      如果此Calendar的时间早于when所表示的时间,则返回true; 否则返回false
      参见:
    • after

      public boolean after(Object when)
      返回此Calendar是否表示晚于指定Object所表示时间的时间。此方法等效于:
      
               compareTo(when) > 0
       
      当且仅当whenCalendar实例时。否则,该方法返回false
      参数:
      when - 要比较的Object
      返回:
      如果此Calendar的时间晚于when所表示的时间,则返回true; 否则返回false
      参见:
    • compareTo

      public int compareTo(Calendar anotherCalendar)
      比较两个Calendar对象表示的时间值(从Epoch的毫秒偏移量)。
      指定者:
      compareTo 在接口 Comparable<Calendar>
      参数:
      anotherCalendar - 要比较的Calendar
      返回:
      如果参数表示的时间等于此Calendar表示的时间,则返回值0; 如果此Calendar的时间早于参数表示的时间,则返回小于0的值; 如果此Calendar的时间晚于参数表示的时间,则返回大于0的值。
      抛出:
      NullPointerException - 如果指定的Calendarnull
      IllegalArgumentException - 如果由于任何无效的日历值而无法获取指定Calendar对象的时间值。
      自:
      1.5
    • add

      public abstract void add(int field, int amount)
      向给定的日历字段添加或减去指定的时间量,基于日历的规则。例如,要从当前日历时间减去5天,可以通过调用以下方式实现:

      add(Calendar.DAY_OF_MONTH, -5)

      参数:
      field - 日历字段。
      amount - 要添加到字段的日期或时间量。
      抛出:
      IllegalArgumentException - 如果此Calendar是非宽松的,并且任何日历字段具有无效值,或者如果fieldZONE_OFFSETDST_OFFSET或未知。
      参见:
    • roll

      public abstract void roll(int field, boolean up)
      在不更改较大字段的情况下,向给定的时间字段添加或减去(上/下)一个时间单元。例如,要将当前日期向前滚动一天,可以通过调用以下方式实现:

      roll(Calendar.DATE, true)。在年或Calendar.YEAR字段上滚动时,将在调用getMaximum(Calendar.YEAR)返回的值之间滚动年值。在月或Calendar.MONTH字段上滚动时,其他字段(如日期)可能会发生冲突,需要更改。例如,在日期为01/31/96上滚动月份将导致02/29/96。在小时或Calendar.HOUR_OF_DAY字段上滚动时,将在0到23之间滚动小时值,从零开始计数。

      参数:
      field - 时间字段。
      up - 指示是否向上滚动指定时间字段的值。如果向上滚动,则使用true,否则使用false。
      抛出:
      IllegalArgumentException - 如果此Calendar是非宽松的,并且任何日历字段具有无效值,或者如果fieldZONE_OFFSETDST_OFFSET或未知。
      参见:
    • roll

      public void roll(int field, int amount)
      向指定的日历字段添加(有符号的)指定数量的时间,而不更改较大字段。负数意味着向下滚动。

      注意:此Calendar上的默认实现只是重复调用按一个单位滚动的roll()版本。这可能并不总是正确的。例如,如果DAY_OF_MONTH字段为31,则通过二月滚动将使其设置为28。这个问题由GregorianCalendar版本的此函数处理。其他子类还应提供此函数的覆盖,以执行正确的操作。

      参数:
      field - 日历字段。
      amount - 要添加到日历field的有符号数量。
      抛出:
      IllegalArgumentException - 如果此Calendar是非宽松的,并且任何日历字段具有无效值,或者如果fieldZONE_OFFSETDST_OFFSET或未知。
      自:
      1.2
      参见:
    • setTimeZone

      public void setTimeZone(TimeZone value)
      使用给定的时区值设置时区。
      参数:
      value - 给定的时区。
    • getTimeZone

      public TimeZone 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)
      设置一周的第一天是什么;例如,在美国是星期日,在法国是星期一
      参数:
      value - 给定的一周的第一天。
      参见:
    • getFirstDayOfWeek

      public int getFirstDayOfWeek()
      获取一周的第一天是什么;例如,在美国是星期日,在法国是星期一
      返回:
      一周的第一天。
      参见:
    • setMinimalDaysInFirstWeek

      public void setMinimalDaysInFirstWeek(int value)
      设置一年中第一周所需的最少天数;例如,如果第一周被定义为包含一年中第一个月的第一天的周,调用此方法并使用值1。如果必须是完整的一周,则使用值7。
      参数:
      value - 给定的一年中第一周所需的最小天数。
      参见:
    • getMinimalDaysInFirstWeek

      public int getMinimalDaysInFirstWeek()
      获取一年中第一周所需的最小天数;例如,如果第一周被定义为包含一年中第一个月的第一天的周,则此方法返回1。如果所需的最小天数必须是整整一周,则此方法返回7。
      返回:
      一年中第一周所需的最小天数。
      参见:
    • isWeekDateSupported

      public boolean isWeekDateSupported()
      返回此Calendar是否支持周日期。

      此方法的默认实现返回false

      返回:
      如果此Calendar支持周日期,则返回true;否则返回false
      自版本:
      1.7
      参见:
    • getWeekYear

      public int getWeekYear()
      返回此Calendar表示的周年。周年与周周期同步。第一周的第一天是周年的第一天。

      此方法的默认实现会抛出一个UnsupportedOperationException

      返回:
      Calendar的周年
      抛出:
      UnsupportedOperationException - 如果此Calendar不支持任何周年编号。
      自版本:
      1.7
      参见:
    • setWeekDate

      public void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)
      使用给定的日期标识符(周年、周数和星期几)设置此Calendar的日期。

      set方法不同,所有日历字段和time值都会在返回时计算。

      如果weekOfYear超出了weekYear中有效的周数范围,则在宽松模式下会调整weekYearweekOfYear的值,或者在非宽松模式下会抛出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)返回的最小值。最小最大值取决于实例的特定日历系统参数。例如,对于公历系统的CalendarDAY_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

      public Object clone()
      创建并返回此对象的副本。
      覆盖:
      clone 在类 Object
      返回值:
      此对象的副本。
      参见:
    • toString

      public String toString()
      返回此日历的字符串表示。此方法仅用于调试目的,返回的字符串格式可能因实现而异。返回的字符串可能为空,但不能为null
      覆盖:
      toString 在类 Object
      返回值:
      此日历的字符串表示。
    • toInstant

      public final Instant toInstant()
      将此对象转换为一个Instant

      转换创建一个表示与此Calendar相同时间线上的Instant

      返回值:
      表示相同时间线上相同点的即时
      自版本:
      1.8