Module  java.base
软件包  java.util

Class Calendar

  • All Implemented Interfaces:
    SerializableCloneableComparable<Calendar>
    已知直接子类:
    GregorianCalendar


    public abstract class Calendar
    extends Object
    implements Serializable, Cloneable, Comparable<Calendar>
    所述Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fieldsYEARMONTHDAY_OF_MONTHHOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期。 时间上的瞬间可以表示为毫秒值,该值与1970年1月1日00:00:00.000 GMT(格里高利)的Epoch偏移。

    该类还提供了用于在包外部实现具体日历系统的其他字段和方法。 这些字段和方法定义为protected

    像其他语言环境敏感的类一样, Calendar提供了一个类方法, getInstance ,用于获取这种类型的一般有用的对象。 CalendargetInstance方法返回一个Calendar对象,其日历字段已使用当前日期和时间初始化:

         Calendar rightNow = Calendar.getInstance();
     

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

    获取和设置日历字段值

    日历字段值可以通过调用set方法设置。 Calendar设置的任何字段值将不被解释,直到它需要计算其时间值(从Epoch的毫秒)或日历字段的值。 调用getgetTimeInMillisgetTimeaddroll涉及这样的计算。

    宽大

    Calendar有两种方式来解释日历字段, 宽松不宽泛 Calendar处于宽松模式时,它接受比它产生的更广泛的日历字段值。 Calendar重新计算日历字段值以返回get() ,所有日历字段都被归一化。 例如,宽松的GregorianCalendar将解释MONTH == JANUARY DAY_OF_MONTH == 32为2月1日。

    Calendar处于非宽松模式时,如果其日历字段中存在任何不一致,则会抛出异常。 例如, GregorianCalendar总是在1和月份之间产生DAY_OF_MONTH值。 如果设置了超出范围的字段值,则非宽松的GregorianCalendar会在计算其时间或日历字段值时抛出异常。

    First Week

    Calendar使用两个参数定义了一个特定地区的七天周:第一周的第一天和第一周的最小天数(从1到7)。 当构建一个Calendar时,这些数字取自区域设置资源数据。 也可以通过设置其值的方法来明确指定它们。

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

    日历字段分辨率

    在计算日历字段的日期和时间时,可能没有足够的计算信息(例如只有年月日没有月份),或者可能存在不一致的信息(例如1996年7月15日星期二(格里高利) - 1996年7月15日实际上是星期一)。 Calendar将以下列方式解析日历字段值以确定日期和时间。

    If there is any conflict in calendar field values, Calendar gives priorities to calendar fields that have been set more recently.以下是日历字段的默认组合。 将使用由最近设置的单个字段确定的最新组合。

    For the date fields

     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
     
    For the time of day fields
     HOUR_OF_DAY
     AM_PM + HOUR
     

    如果在所选字段组合中没有设置其值的任何日历字段,则Calendar使用其默认值。 每个字段的默认值可能会因具体的日历系统而异。 例如, GregorianCalendar ,字段的默认值是相同的时代的开始:即YEAR = 1970MONTH = JANUARYDAY_OF_MONTH = 1 ,等等。

    注意:在某些奇异时期的解释中存在某些可能的含糊之处,其解决方式如下:

    1. 23:59是一天的最后一分钟,00:00是第二天的第一分钟。 因此,一九九九年十二月三十一日(星期三)在二○○○年一月一日(星期一)
    2. 虽然历史上不太精确,但午夜也属于“am”,中午属于“pm”,所以在同一天12:00(午夜)上午12时01分,中午12:00(中午)下午01点

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

    现场操纵

    :日历字段可以用三种方法来改变set()add() ,并roll()

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

    例如 :考虑一个GregorianCalendar最初被设置为1999调用8月31日set(Calendar.MONTH, Calendar.SEPTEMBER)台日至九月31日,1999年这是一个临时的内部表示解析为1999年10月1,如果getTime() ,然后调用。 但是,在拨打set(Calendar.DAY_OF_MONTH, 30)之前拨打getTime()将日期设置为1999年9月30日,因为在set()本身之后没有重新计算。

    add(f, delta)增加delta现场f 这相当于调用set(f, get(f) + delta)进行了两次调整:

    Add rule 1. The value of field f after the call minus the value of field f before the call is delta, modulo any overflow that has occurred in field f. Overflow occurs when a field value exceeds its range and, as a result, the next larger field is incremented or decremented and the field value is adjusted back into its range.

    Add rule 2. If a smaller field is expected to be invariant, but it is impossible for it to be equal to its prior value because of changes in its minimum or maximum after field f is changed or other constraints, such as time zone offset changes, then its value is adjusted to be as close as possible to its expected value. A smaller field represents a smaller unit of time. HOUR is a smaller field than DAY_OF_MONTH. No adjustment is made to smaller fields that are not expected to be invariant. The calendar system determines what fields are expected to be invariant.

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

    例如 :考虑一个GregorianCalendar最初被设置为1999调用8月31日, add(Calendar.MONTH, 13)套日历9月30日,2000年添加规则1MONTH场至九月,因为加入13个月月给明年九月。 由于DAY_OF_MONTH不能在9月31日在GregorianCalendar添加规则2DAY_OF_MONTH设置为30,最接近的可能值。 虽然它是一个较小的领域, DAY_OF_WEEK没有被规则2调整,因为预期在GregorianCalendar的月份变化时会改变。

    roll(f, delta)增加delta现场f ,不更改更大的字段。 这相当于调用add(f, delta)进行以下调整:

    Roll rule. Larger fields are unchanged after the call. A larger field represents a larger unit of time. DAY_OF_MONTH is a larger field than HOUR.

    示例 :参见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() ,取决于是否影响较大的字段,用户界面可以像大多数用户一样直观地期待。

    从以下版本开始:
    1.1
    另请参见:
    System.currentTimeMillis()DateGregorianCalendarTimeZoneDateFormatSerialized Form
    • Nested Class Summary

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

      Fields  
      Modifier and Type Field 描述
      static int ALL_STYLES
      一个表示 getDisplayNames的样式说明符,表示所有样式的名称,如“1月”和“1月”。
      static int AM
      AM_PM字段的值表示从午夜到中午之前的一天的时间。
      static int AM_PM
      对于现场数 getset指示是否 HOUR是前或中午之后。
      static int APRIL
      MONTH字段的价值指示了公历和朱利安日历中的第四个月。
      protected boolean areFieldsSet
      如果 fields[]与当前设置的时间同步, fields[]真。
      static int AUGUST
      MONTH字段的值表示公历和朱利安日历中的第八个月。
      static int DATE
      getset字段编号,表示该月的日期。
      static int DAY_OF_MONTH
      get字段编号和 set表示本月的日期。
      static int DAY_OF_WEEK
      get字段编号和 set表示星期几。
      static int DAY_OF_WEEK_IN_MONTH
      getset字段编号,表示当月的星期几的序数。
      static int DAY_OF_YEAR
      get字段编号和 set表示 set的日数。
      static int DECEMBER
      MONTH字段的值表示公历和朱利安日历中的第十二个月。
      static int DST_OFFSET
      get字段编号和 set表示夏令时偏移量(以毫秒为单位)。
      static int ERA
      get字段号和 set表示时代,例如,在儒略历中的AD或BC。
      static int FEBRUARY
      MONTH字段的值表示今年第二个月在公历和朱利安日历。
      static int FIELD_COUNT
      getset识别的不同字段的数量。
      protected int[] fields
      该日历的当前设置时间的日历字段值。
      static int FRIDAY
      DAY_OF_WEEK字段的值表示周五。
      static int HOUR
      getset字段编号,表示上午或下午的小时。
      static int HOUR_OF_DAY
      getset字段编号,表示当天的小时数。
      protected boolean[] isSet
      说明是否设置日历的指定日历字段的标志。
      protected boolean isTimeSet
      如果那么那么 time的值是有效的。
      static int JANUARY
      MONTH领域的价值指示了公历和朱利安日历中的一年中的第一个月。
      static int JULY
      MONTH领域的价值指示了公历和朱利安日历中的第七个月。
      static int JUNE
      MONTH字段的值代表了公历和朱利安日历中的第六个月。
      static int LONG
      一个样式说明符 getDisplayNamegetDisplayNames相当于 LONG_FORMAT
      static int LONG_FORMAT
      getDisplayNamegetDisplayNames样式说明 ,表示用于格式的长名称。
      static int LONG_STANDALONE
      一个表示 getDisplayNamegetDisplayNames样式说明 ,表示一个长名独立使用,如月份名称作为日历头。
      static int MARCH
      MONTH字段的价值,表示今年第三个月在公历和朱利安日历。
      static int MAY
      MONTH字段的价值显示了公历和朱利安日历中的第五个月。
      static int MILLISECOND
      get字段编号和 set表示秒内的毫秒数。
      static int MINUTE
      get字段编号和 set表示小时内的分钟。
      static int MONDAY
      DAY_OF_WEEK字段的值表示星期一。
      static int MONTH
      getset字段号表示该月。
      static int NARROW_FORMAT
      一个用于 getDisplayNamegetDisplayNames样式说明 ,表示用于格式的窄名称。
      static int NARROW_STANDALONE
      getDisplayNamegetDisplayNames样式说明符独立地表示一个狭义的名称。
      static int NOVEMBER
      MONTH字段的值代表了公历和朱利安日历中的第十一个月。
      static int OCTOBER
      MONTH字段的价值表示在公历和朱利安日历中的一年中的第十个月。
      static int PM
      AM_PM字段的值表示从中午到午夜之前的一天中的一段时间。
      static int SATURDAY
      DAY_OF_WEEK字段的值表示星期六。
      static int SECOND
      get字段编号和 set表示分钟内的第二个。
      static int SEPTEMBER
      MONTH字段的值代表了公历和朱利安日历中的第九个月。
      static int SHORT
      一个样式说明符 getDisplayNamegetDisplayNames相当于 SHORT_FORMAT
      static int SHORT_FORMAT
      getDisplayNamegetDisplayNames样式说明 ,表示用于格式的短名称。
      static int SHORT_STANDALONE
      一个 getDisplayNamegetDisplayNames样式说明 ,表示一个简单的名称,例如一个月缩写作为日历头。
      static int SUNDAY
      DAY_OF_WEEK字段的值表示星期天。
      static int THURSDAY
      DAY_OF_WEEK字段的值表示周四。
      protected long time
      这个日历的当前设定时间,以1970年1月1日,格林尼治标准时间0:00:00之后的毫秒表示。
      static int TUESDAY
      DAY_OF_WEEK字段的值表示周二。
      static int UNDECIMBER
      MONTH字段的值表示一年的第十三个月。
      static int WEDNESDAY
      价值 DAY_OF_WEEK字段表示周三。
      static int WEEK_OF_MONTH
      get字段编号和 set表示 set的周数。
      static int WEEK_OF_YEAR
      get字段编号和 set表示 set的周数。
      static int YEAR
      get字段编号和 set表示年份。
      static int ZONE_OFFSET
      get字段编号和 set表示以毫秒为单位的GMT的原始偏移量。
    • 构造方法摘要

      构造方法  
      Modifier Constructor 描述
      protected Calendar​()
      构造具有默认时区和默认 FORMAT语言环境的日历。
      protected Calendar​(TimeZone zone, Locale aLocale)
      构造具有指定时区和区域设置的日历。
    • 方法摘要

      所有方法  静态方法  接口方法  抽象方法  具体的方法 
      Modifier and Type 方法 描述
      abstract void add​(int field, int amount)
      根据日历的规则,将指定的时间量添加或减去给定的日历字段。
      boolean after​(Object when)
      返回 Calendar是否表示在指定的 Object表示的时间之后的时间。
      boolean before​(Object when)
      返回此 Calendar是否表示由指定的 Object表示的时间之前的时间。
      void clear​()
      将所有的日历字段值和时间值(毫秒从偏移 Epoch如此) Calendar不确定。
      void clear​(int field)
      设置给定日历字段值和时间值(毫秒从偏移 Epoch如此) Calendar不确定。
      Object clone​()
      创建并返回此对象的副本。
      int compareTo​(Calendar anotherCalendar)
      比较由两个 Calendar对象表示的时间值( Epoch的毫秒偏移量)。
      protected void complete​()
      填写日历字段中的任何未设置的字段。
      protected abstract void computeFields​()
      当前毫秒时间值转换为 time的日历字段值 fields[]
      protected abstract void computeTime​()
      fields[]的当前日历字段值 转换为毫秒时间值 time
      boolean equals​(Object obj)
      将此 Calendar与指定的 Object
      int get​(int field)
      返回给定日历字段的值。
      int getActualMaximum​(int field)
      给定此 Calendar的时间值,返回指定日历字段可能具有的 Calendar
      int getActualMinimum​(int field)
      给定此 Calendar的时间值,返回指定日历字段可能具有的 Calendar
      static Set<String> getAvailableCalendarTypes​()
      返回一个不可修改的 Set其中包含 Calendar在运行时环境中支持的所有日历类型。
      static Locale[] getAvailableLocales​()
      返回一个所有语言环境的数组,该类的 getInstance方法可以返回本地化实例。
      String getCalendarType​()
      返回此 Calendar的日历类型。
      String getDisplayName​(int field, int style, Locale locale)
      返回给定的 stylelocale中的日历 field的字符串表示。
      Map<String,Integer> getDisplayNames​(int field, int style, Locale locale)
      返回一个 Map其中包含给定的 stylelocale中的日历 field所有名称及其对应的字段值。
      int getFirstDayOfWeek​()
      得到一周的第一天是什么 例如, SUNDAY在美国, MONDAY在法国。
      abstract int getGreatestMinimum​(int field)
      返回此 Calendar实例的给定日历字段的最高最小值。
      static Calendar getInstance​()
      使用默认时区和区域设置获取日历。
      static Calendar getInstance​(Locale aLocale)
      使用默认时区和指定的区域设置获取日历。
      static Calendar getInstance​(TimeZone zone)
      使用指定的时区和默认语言环境获取日历。
      static Calendar getInstance​(TimeZone zone, Locale aLocale)
      获取具有指定时区和区域设置的日历。
      abstract int getLeastMaximum​(int field)
      返回此 Calendar实例的给定日历字段的最低最大值。
      abstract int getMaximum​(int field)
      返回此 Calendar实例的给定日历字段的 Calendar
      int getMinimalDaysInFirstWeek​()
      获得一年中第一周所需的最低限度的日子; 例如,如果第一周被定义为包含一年中的第一个月的第一个星期,则此方法返回1。
      abstract int getMinimum​(int field)
      返回此 Calendar实例的给定日历字段的 Calendar
      Date getTime​()
      返回表示 Calendar的时间值(与 Epoch的毫秒偏移量)的 Date对象。
      long getTimeInMillis​()
      以毫秒为单位返回此日历的时间值。
      TimeZone getTimeZone​()
      获取时区。
      int getWeeksInWeekYear​()
      返回此 Calendar代表的星期内的星期 Calendar
      int getWeekYear​()
      返回此 Calendar代表的 Calendar
      int hashCode​()
      返回此日历的哈希码。
      protected int internalGet​(int field)
      返回给定日历字段的值。
      boolean isLenient​()
      告诉日期/时间的解释是否宽松。
      boolean isSet​(int field)
      确定给定的日历字段是否具有值集,包括通过 get方法调用触发的内部字段计算设置的值的情况。
      boolean isWeekDateSupported​()
      是否返回 Calendar是否支持星期。
      abstract void roll​(int field, boolean up)
      在给定时间字段上添加或减少单个时间单位,而不改变较大的字段。
      void roll​(int field, int amount)
      将指定(签名)金额添加到指定的日历字段,而不更改较大的字段。
      void set​(int field, int value)
      将给定的日历字段设置为给定的值。
      void set​(int year, int month, int date)
      设置日历字段的值 YEARMONTH ,并 DAY_OF_MONTH
      void set​(int year, int month, int date, int hourOfDay, int minute)
      设置日历字段的值 YEARMONTHDAY_OF_MONTHHOUR_OF_DAY ,并 MINUTE
      void set​(int year, int month, int date, int hourOfDay, int minute, int second)
      设置字段中的值 YEARMONTHDAY_OF_MONTHHOUR_OF_DAYMINUTE ,并 SECOND
      void setFirstDayOfWeek​(int value)
      设置一周的第一天是什么? 例如, SUNDAY在美国, MONDAY在法国。
      void setLenient​(boolean lenient)
      指定日期/时间解释是否宽松。
      void setMinimalDaysInFirstWeek​(int value)
      设定一年中第一个星期所需的最短时间是多少? 例如,如果第一周被定义为包含一年中第一个月的第一天的第一周,请调用此值为1的方法。
      void setTime​(Date date)
      使用给定的 Date设置此日历的时间。
      void setTimeInMillis​(long millis)
      从给定的长值设置此日历的当前时间。
      void setTimeZone​(TimeZone value)
      以给定的时区值设置时区。
      void setWeekDate​(int weekYear, int weekOfYear, int dayOfWeek)
      设置这个 Calendar的日期与给定的日期说明符 - 周年,年周和星期几。
      Instant toInstant​()
      将此对象转换为Instant
      String toString​()
      返回此日历的字符串表示形式。
    • 字段详细信息

      • YEAR

        public static final int YEAR
        现场号码为getset表示年度。 这是一个日历特定的值 请参阅子类文档。
        另请参见:
        Constant Field Values
      • WEEK_OF_YEAR

        public static final int WEEK_OF_YEAR
        getset字段编号, get set的周数。 getFirstDayOfWeek()getMinimalDaysInFirstWeek()定义的一年中的第一周具有值1.子类在一年的第一周之前的几天内定义了WEEK_OF_YEAR的值。
        另请参见:
        getFirstDayOfWeek()getMinimalDaysInFirstWeek()Constant Field Values
      • WEEK_OF_MONTH

        public static final int WEEK_OF_MONTH
        get字段编号和set表示set的周数。 本月的第一个星期,由getFirstDayOfWeek()getMinimalDaysInFirstWeek()定义,具有值1.子类在本月的第一周之前的天数定义了WEEK_OF_MONTH的值。
        另请参见:
        getFirstDayOfWeek()getMinimalDaysInFirstWeek()Constant Field Values
      • DATE

        public static final int DATE
        get字段编号和set表示本月的日期。 这是DAY_OF_MONTH的同义词。 本月的第一天价值为1。
        另请参见:
        DAY_OF_MONTHConstant Field Values
      • DAY_OF_MONTH

        public static final int DAY_OF_MONTH
        get字段编号和set表示本月的日期。 这是DATE的同义词。 本月的第一天价值为1。
        另请参见:
        DATEConstant Field Values
      • DAY_OF_YEAR

        public static final int DAY_OF_YEAR
        get字段编号和set表示set的日数。 今年第一天的价值为1。
        另请参见:
        Constant Field Values
      • 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 1通过7总是对应DAY_OF_WEEK_IN_MONTH 1 ; 814对应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
        另请参见:
        DAY_OF_WEEKWEEK_OF_MONTHConstant Field Values
      • AM_PM

        public static final int AM_PM
        get字段编号和set说明HOUR是在中午还是之后。 例如,10:04:15.250 PM, AM_PMPM
        另请参见:
        AMPMHOURConstant Field Values
      • HOUR

        public static final int HOUR
        get字段编号和set表示上午或下午的小时。 HOUR用于12小时钟(0 - 11)。 中午和午夜由0而不是12表示。例如,10:04:15.250 PM, HOUR是10。
        另请参见:
        AM_PMHOUR_OF_DAYConstant Field Values
      • HOUR_OF_DAY

        public static final int HOUR_OF_DAY
        get字段编号和set表示当天的小时数。 HOUR_OF_DAY用于24小时制。 例如:10:04:15.250 PM, HOUR_OF_DAY是22。
        另请参见:
        HOURConstant Field Values
      • MINUTE

        public static final int MINUTE
        getset字段编号表示一小时内的分钟。 例如,10:04:15.250 PM, MINUTE是4。
        另请参见:
        Constant Field Values
      • SECOND

        public static final int SECOND
        get字段编号和set表示分钟内的第二个。 例如,10:04:15.250 PM, SECOND是15。
        另请参见:
        Constant Field Values
      • MILLISECOND

        public static final int MILLISECOND
        get字段编号和set表示秒内的毫秒数。 例如:10:04:15.250 PM, MILLISECOND是250。
        另请参见:
        Constant Field Values
      • ZONE_OFFSET

        public static final int ZONE_OFFSET
        get字段编号和set表示以毫秒为单位的GMT的原始偏移量。

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

        另请参见:
        Constant Field Values
      • DST_OFFSET

        public static final int DST_OFFSET
        get字段编号和set表示夏令时偏移量(以毫秒为单位)。

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

        另请参见:
        Constant Field Values
      • FIELD_COUNT

        public static final int FIELD_COUNT
        getset识别的不同字段的数量。 字段编号范围从0..FIELD_COUNT-1
        另请参见:
        Constant Field Values
      • JANUARY

        public static final int JANUARY
        MONTH字段的值代表了公历和朱利安日历中的一年中的第一个月。
        另请参见:
        Constant Field Values
      • FEBRUARY

        public static final int FEBRUARY
        MONTH字段的值代表了今年第二个月在格里高利和朱利安的日历。
        另请参见:
        Constant Field Values
      • MARCH

        public static final int MARCH
        MONTH字段的值表示公历和朱利安日历中的第三个月。
        另请参见:
        Constant Field Values
      • APRIL

        public static final int APRIL
        MONTH领域的价值指示了公历和朱利安日历中的第四个月。
        另请参见:
        Constant Field Values
      • MAY

        public static final int MAY
        MONTH字段的值代表了公历和朱利安日历中的第五个月。
        另请参见:
        Constant Field Values
      • JUNE

        public static final int JUNE
        MONTH字段的值代表了公历和朱利安日历中的第六个月。
        另请参见:
        Constant Field Values
      • JULY

        public static final int JULY
        MONTH字段的价值,表示今年第七个月在公历和朱利安日历。
        另请参见:
        Constant Field Values
      • AUGUST

        public static final int AUGUST
        MONTH领域的价值指示了公历和朱利安日历中的第八个月。
        另请参见:
        Constant Field Values
      • SEPTEMBER

        public static final int SEPTEMBER
        MONTH领域的价值指示了公历和朱利安日历中的第九个月。
        另请参见:
        Constant Field Values
      • OCTOBER

        public static final int OCTOBER
        MONTH字段的值代表了公历和朱利安日历中的第10个月。
        另请参见:
        Constant Field Values
      • NOVEMBER

        public static final int NOVEMBER
        MONTH字段的值代表了公历和朱利安日历中的第十一个月。
        另请参见:
        Constant Field Values
      • DECEMBER

        public static final int DECEMBER
        MONTH字段的值表示公历和朱利安日历中的第十二个月。
        另请参见:
        Constant Field Values
      • UNDECIMBER

        public static final int UNDECIMBER
        MONTH字段的值表示一年的第十三个月。 虽然GregorianCalendar不使用这个值,但是月历也是这样。
        另请参见:
        Constant Field Values
      • AM

        public static final int AM
        AM_PM字段的值表示从午夜到中午之前的一天的时间。
        另请参见:
        Constant Field Values
      • PM

        public static final int PM
        AM_PM字段的值表示从中午到午夜之前的一天中的一段时间。
        另请参见:
        Constant Field Values
      • fields

        protected int[] fields
        该日历的当前设置时间的日历字段值。 这是一个FIELD_COUNT整数的数组,索引值为ERADST_OFFSET
      • isSet

        protected boolean[] isSet
        说明是否设置日历的指定日历字段的标志。 一个新对象没有设置字段。 在首次调用生成字段的方法之后,它们都将保持置位。 这是一个FIELD_COUNT布尔阵列,索引值为ERADST_OFFSET
      • time

        protected long time
        这个日历的当前设定时间,以1970年1月1日,格林尼治标准时间0:00:00之后的毫秒表示。
        另请参见:
        isTimeSet
      • isTimeSet

        protected boolean isTimeSet
        如果那么time的值是有效的。 通过更改field[]的项目使时间无效。
        另请参见:
        time
      • areFieldsSet

        protected boolean areFieldsSet
        如果fields[]与当前设置的时间同步, fields[]真。 如果为false,则下一次尝试获取字段的值将强制从当前值time重新计算所有字段。
    • 构造方法详细信息

      • Calendar

        protected Calendar​()
        构造具有默认时区和默认 FORMAT语言环境的日历。
        另请参见:
        TimeZone.getDefault()
      • Calendar

        protected Calendar​(TimeZone zone,
                           Locale aLocale)
        构造具有指定时区和区域设置的日历。
        参数
        zone - 使用的时区
        aLocale - 周数据的区域设置
    • 方法详细信息

      • getInstance

        public static Calendar getInstance​()
        使用默认时区和区域设置获取日历。 返回的Calendar是基于默认时区的当前时间,默认为FORMAT区域设置。
        结果
        日历。
      • getInstance

        public static Calendar getInstance​(TimeZone zone)
        使用指定的时区和默认语言环境获取日历。 Calendar返回的是基于给定时区的当前时间,默认为FORMAT
        参数
        zone - 使用的时区
        结果
        日历。
      • getInstance

        public static Calendar getInstance​(Locale aLocale)
        使用默认时区和指定的区域设置获取日历。 返回的Calendar是基于指定区域设置的默认时区中的当前时间。
        参数
        aLocale - 周数据的区域设置
        结果
        日历。
      • getInstance

        public static Calendar getInstance​(TimeZone zone,
                                           Locale aLocale)
        获取具有指定时区和区域设置的日历。 返回的Calendar是基于给定时区的当前时间与给定的区域设置。
        参数
        zone - 使用的时区
        aLocale - 周数据的区域设置
        结果
        日历。
      • getAvailableLocales

        public static Locale[] getAvailableLocales​()
        返回所有语言环境的数组,该类的getInstance方法可以返回本地化实例。 返回的数组必须至少包含一个等于Locale.USLocale实例。
        结果
        一组可用本地化 Calendar实例的区域设置。
      • computeFields

        protected abstract void computeFields​()
        当前毫秒时间值转换为time的日历字段值fields[] 这样,您可以将日历字段值与为日历设置的新时间进行同步。 时间重新计算; 重新计算时间,然后字段,调用complete()方法。
        另请参见:
        computeTime()
      • getTime

        public final Date getTime​()
        返回表示 Calendar的时间值(与 Epoch毫秒偏移量)的 Date对象。
        结果
        一个表示时间值的 Date
        另请参见:
        setTime(Date)getTimeInMillis()
      • setTime

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

        注意:调用setTime()Date(Long.MAX_VALUE)或者Date(Long.MIN_VALUE)可能产生不正确的字段值get()

        参数
        date - 给定的日期。
        另请参见:
        getTime()setTimeInMillis(long)
      • getTimeInMillis

        public long getTimeInMillis​()
        以毫秒为单位返回此日历的时间值。
        结果
        当前时间为UTC的毫秒数。
        另请参见:
        getTime()setTimeInMillis(long)
      • setTimeInMillis

        public void setTimeInMillis​(long millis)
        从给定的长值设置此日历的当前时间。
        参数
        millis - 从时代以UTC为单位的新时间。
        另请参见:
        setTime(Date)getTimeInMillis()
      • get

        public int get​(int field)
        返回给定日历字段的值。 在宽大模式下,所有日历字段都被归一化。 在非宽泛模式下,所有日历字段都被验证,如果任何日历字段具有超出范围的值,该方法将抛出异常。 归一化和验证由complete()方法处理,该过程是与日历系统相关的。
        参数
        field - 给定的日历字段。
        结果
        给定日历字段的值。
        异常
        ArrayIndexOutOfBoundsException - 如果指定的字段超出范围( field < 0 || field >= FIELD_COUNT )。
        另请参见:
        set(int,int)complete()
      • internalGet

        protected final int internalGet​(int field)
        返回给定日历字段的值。 该方法不涉及字段值的归一化或验证。
        参数
        field - 给定的日历字段。
        结果
        给定日历字段的值。
        另请参见:
        get(int)
      • set

        public final void set​(int year,
                              int month,
                              int date)
        设置日历字段的值YEARMONTH ,并DAY_OF_MONTH 其他日历字段的以前值被保留。 如果不需要, 请先拨打clear()
        参数
        year - 用于设置 YEAR日历字段的值。
        month - 用于设置MONTH日历字段的值。 月值为0。 例如,1月份为0。
        date - 用于设置 DAY_OF_MONTH日历字段的值。
        另请参见:
        set(int,int)set(int,int,int,int,int)set(int,int,int,int,int,int)
      • set

        public final void set​(int year,
                              int month,
                              int date,
                              int hourOfDay,
                              int minute)
        设置日历字段的值YEARMONTHDAY_OF_MONTHHOUR_OF_DAY ,并MINUTE 保留其他字段的以前的值。 如果不希望, 请先拨打clear()
        参数
        year - 用于设置 YEAR日历字段的值。
        month - 用于设置MONTH日历字段的值。 月值为0。 例如,1月份为0。
        date - 用于设置 DAY_OF_MONTH日历字段的值。
        hourOfDay - 用于设置 HOUR_OF_DAY日历字段的值。
        minute - 用于设置 MINUTE日历字段的值。
        另请参见:
        set(int,int)set(int,int,int)set(int,int,int,int,int,int)
      • set

        public final void set​(int year,
                              int month,
                              int date,
                              int hourOfDay,
                              int minute,
                              int second)
        设置字段中的值YEARMONTHDAY_OF_MONTHHOUR_OF_DAYMINUTE ,并SECOND 保留其他字段的以前的值。 如果不希望, 请先拨打clear()
        参数
        year - 用于设置 YEAR日历字段的值。
        month - 用于设置MONTH日历字段的值。 月值为0。 例如,1月份为0。
        date - 用于设置 DAY_OF_MONTH日历字段的值。
        hourOfDay - 用于设置 HOUR_OF_DAY日历字段的值。
        minute - 用于设置 MINUTE日历字段的值。
        second - 用于设置 SECOND日历字段的值。
        另请参见:
        set(int,int)set(int,int,int)set(int,int,int,int,int)
      • clear

        public final void clear​()
        将所有的日历字段值和时间值(毫秒从偏移Epoch如此) Calendar不确定。 这意味着isSet()将为所有日历字段返回false ,并且日期和时间计算将会将这些字段视为未被设置。 Calendar实现类可以使用其特定的默认字段值进行日期/时间计算。 例如,如果YEAR字段值未定义,则GregorianCalendar使用1970。
        另请参见:
        clear(int)
      • clear

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

        HOUR_OF_DAYHOURAM_PM字段独立地处理,并且the resolution rule for the time of day被应用。 清除其中一个字段不会重置此Calendar的小时值。 使用set(Calendar.HOUR_OF_DAY, 0)重置小时值。

        参数
        field - 要清除的日历字段。
        另请参见:
        clear()
      • isSet

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

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

        例如,如果这个CalendarGregorianCalendar ,其日期是2005-01-01,那么MONTH字段的字符串表示形式将是英文区域设置中的长形式的“1月”或短格式的“Jan”。 但是, DAY_OF_MONTH字段不能使用字符串表示形式,此方法将返回null

        默认实现支持其中的日历字段DateFormatSymbols在给定的名字locale

        参数
        field - 返回字符串表示形式的日历字段
        style - 应用于字符串表示形式的样式; 之一SHORT_FORMATSHORT ), SHORT_STANDALONELONG_FORMATLONG ), LONG_STANDALONENARROW_FORMAT ,或NARROW_STANDALONE
        locale - 字符串表示的区域设置(由 locale指定的任何日历类型都将被忽略)
        结果
        给定的 field在给定的 style字符串表示,或 null如果没有字符串表示是适用的。
        异常
        IllegalArgumentException - 如果 fieldstyle无效,或者如果此 Calendar不宽容,并且任何日历字段都有无效值
        NullPointerException - 如果 locale为空
        从以下版本开始:
        1.6
      • getDisplayNames

        public Map<String,Integer> getDisplayNames​(int field,
                                                   int style,
                                                   Locale locale)
        返回一个Map其中包含给定的stylelocale中的日历field所有名称及其对应的字段值。 例如,如果这个CalendarGregorianCalendar ,那么返回的地图将包含“Jan”到JANUARY ,“Feb”到FEBRUARY ,依此类推,在英文语言环境中的short样式中。

        由于使用单个字符(例如星期日和星期六的“S”),狭义名称可能不是唯一的。 在这种情况下,缩小的名称不包括在返回的Map

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

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

        参数
        field - 显示名称返回的日历字段
        style - 应用于字符串表示形式的样式; 之一SHORT_FORMATSHORT ), SHORT_STANDALONELONG_FORMATLONG ), LONG_STANDALONENARROW_FORMAT ,或NARROW_STANDALONE
        locale - 显示名称的区域设置
        结果
        一个 Map包含在所有显示名称 stylelocale和它们的字段值,或 null ,如果没有显示名称为定义 field
        异常
        IllegalArgumentException - 如果 fieldstyle无效,或者如果此 Calendar不宽容,并且任何日历字段都有无效值
        NullPointerException - 如果 locale为空
        从以下版本开始:
        1.6
      • complete

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

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

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

        结果
        LDML定义的日历类型或此 Calendar实例的类名称
        从以下版本开始:
        1.8
        另请参见:
        Locale extensionsLocale.Builder.setLocale(Locale)Locale.Builder.setUnicodeLocaleKeyword(String, String)
      • equals

        public boolean equals​(Object obj)
        将此Calendar与指定的Object 结果是true当且仅当参数是同一个日历系统的Calendar对象,该对象表示与此对象相同的Calendar参数的相同时间值(与Epoch的毫秒偏移量)。

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

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

        重写:
        equalsObject
        参数
        obj - 要比较的对象。
        结果
        true如果这个对象等于obj ; 否则为false
        另请参见:
        Object.hashCode()HashMap
      • before

        public boolean before​(Object when)
        返回这个Calendar是否代表指定的Object表示的时间之前的时间。 此方法相当于:
           compareTo(when) < 0  
        当且仅当whenCalendar实例时。 否则,该方法返回false
        参数
        when - 要比较的 Object
        结果
        true ,如果此时Calendar是由下式表示的时间之前when ; 否则为false
        另请参见:
        compareTo(Calendar)
      • after

        public boolean after​(Object when)
        返回Calendar是否表示在指定的Object表示的时间之后的时间。 此方法相当于:
           compareTo(when) > 0  
        当且仅当whenCalendar实例时。 否则,该方法返回false
        参数
        when - 要比较的 Object
        结果
        true如果这个Calendar的时间是在when表示的时间之后; 否则为false
        另请参见:
        compareTo(Calendar)
      • compareTo

        public int compareTo​(Calendar anotherCalendar)
        比较两个 Calendar对象所代表的时间值( Epoch的毫秒偏移量)。
        Specified by:
        compareTo在接口 Comparable<Calendar>
        参数
        anotherCalendar - 要比较的 Calendar
        结果
        0如果由所述参数表示的时间等于由此表示的时间Calendar ; 一个值小于0如果这个Calendar的时间在参数表示的时间之前; 如果此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 - 要添加到该字段的日期或时间的数量。
        另请参见:
        roll(int,int)set(int,int)
      • roll

        public abstract void roll​(int field,
                                  boolean up)
        在给定时间字段上添加或减少单个时间单位,而不改变较大的字段。 例如,要将当前日期推迟一天,您可以通过以下方式实现:

        roll(Calendar.DATE,true)。 当年滚动或Calendar.YEAR字段时,它将滚动年值在1和通过调用getMaximum(Calendar.YEAR)返回的值之间的范围。 当月滚动或Calendar.MONTH字段时,其他字段如date可能会冲突,需要更改。 例如,在01/31/96日期滚动的月份将在02/29/96。 在日历或Calendar.HOUR_OF_DAY字段中滚动时,它将滚动小时值,范围在0到23之间,这是从零开始的。

        参数
        field - 时间字段。
        up - 指示指定时间字段的值是要卷起还是滚动。 如果卷起,请使用true,否则为false。
        另请参见:
        add(int,int)set(int,int)
      • roll

        public void roll​(int field,
                         int amount)
        将指定(签名)金额添加到指定的日历字段,而不更改较大的字段。 负数意味着滚降。

        注意: Calendar上的默认实现只是重复调用一个单位的roll()版本。 这可能不总是做正确的事情。 例如,如果DAY_OF_MONTH字段为31,则滚动到二月将会将其设置为28.该功能的GregorianCalendar版本负责处理此问题。 其他子类也应该提供这个功能的覆盖,做正确的事情。

        参数
        field - 日历字段。
        amount - 加入日历的签名金额 field
        从以下版本开始:
        1.2
        另请参见:
        roll(int,boolean)add(int,int)set(int,int)
      • setTimeZone

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

        public TimeZone getTimeZone​()
        获取时区。
        结果
        与该日历相关联的时区对象。
      • setLenient

        public void setLenient​(boolean lenient)
        指定日期/时间解释是否宽松。 宽松的解释,例如“1996年2月9日”,将被视为等同于1996年2月1日以后的第941天。以严格(不宽容的)解释,这样的日期会引起异常。 默认是宽松的。
        参数
        lenient - true如果宽大模式要打开; false如果要关闭。
        另请参见:
        isLenient()DateFormat.setLenient(boolean)
      • isLenient

        public boolean isLenient​()
        告诉日期/时间的解释是否宽松。
        结果
        true如果本日历的解释模式宽松; false否则。
        另请参见:
        setLenient(boolean)
      • setFirstDayOfWeek

        public void setFirstDayOfWeek​(int value)
        设置一周的第一天是什么? 例如, SUNDAY在美国, MONDAY在法国。
        参数
        value - 一周中给定的第一天。
        另请参见:
        getFirstDayOfWeek()getMinimalDaysInFirstWeek()
      • setMinimalDaysInFirstWeek

        public void setMinimalDaysInFirstWeek​(int value)
        设定一年中第一个星期所需的最短时间是多少? 例如,如果第一周被定义为包含一年中第一个月的第一天的第一个星期,请将该方法称为值1.如果必须是整周,请使用值7。
        参数
        value - 一年中第一周所需的最短日期。
        另请参见:
        getMinimalDaysInFirstWeek()
      • getMinimalDaysInFirstWeek

        public int getMinimalDaysInFirstWeek​()
        获得一年中第一周所需的最低限度的日子; 例如,如果第一周被定义为包含一年中第一个月的第一天的方法,则此方法返回1.如果所需的最小天数必须是整周,则此方法返回7。
        结果
        在一年的第一周所需的最低限度的日子。
        另请参见:
        setMinimalDaysInFirstWeek(int)
      • isWeekDateSupported

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

        此方法的默认实现将返回false

        结果
        true如果这个Calendar支持周日期; 否则为false
        从以下版本开始:
        1.7
        另请参见:
        getWeekYear()setWeekDate(int,int,int)getWeeksInWeekYear()
      • 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
        另请参见:
        isWeekDateSupported()getFirstDayOfWeek()getMinimalDaysInFirstWeek()
      • getLeastMaximum

        public abstract int getLeastMaximum​(int field)
        返回此Calendar实例的给定日历字段的最低最大值。 最低最大值定义为getActualMaximum(int)为任何可能的时间值返回的最小值 最小值取决于实例的日历系统特定参数。 例如, Calendar的公历日历系统为DAY_OF_MONTH字段返回28,因为第28个是这个日历最短的月份的最后一天,2月份在一个普通的年份。
        参数
        field - 日历字段。
        结果
        给定日历字段的最低最大值。
        另请参见:
        getMinimum(int)getMaximum(int)getGreatestMinimum(int)getActualMinimum(int)getActualMaximum(int)
      • getActualMinimum

        public int getActualMinimum​(int field)
        给定此Calendar的时间值,返回指定日历字段可能具有的Calendar

        该方法的默认实现使用迭代算法来确定日历字段的实际最小值。 如果可能,子类应该用更有效的实现来覆盖它 - 在许多情况下,它们可以简单地返回getMinimum()

        参数
        field - 日历字段
        结果
        给定的日期字段的最小值为 Calendar的时间值
        从以下版本开始:
        1.2
        另请参见:
        getMinimum(int)getMaximum(int)getGreatestMinimum(int)getLeastMaximum(int)getActualMaximum(int)
      • getActualMaximum

        public int getActualMaximum​(int field)
        给定此Calendar的时间值,返回指定日历字段可能具有的Calendar 例如, MONTH字段的实际最大值在一些年份为12,在希伯来语日历系统中的其他年份为13。

        该方法的默认实现使用迭代算法来确定日历字段的实际最大值。 如果可能,子类应该用更有效的实现来覆盖它。

        参数
        field - 日历字段
        结果
        给定日历字段的最大值为此 Calendar的时间值
        从以下版本开始:
        1.2
        另请参见:
        getMinimum(int)getMaximum(int)getGreatestMinimum(int)getLeastMaximum(int)getActualMinimum(int)
      • clone

        public Object clone​()
        创建并返回此对象的副本。
        重写:
        cloneObject
        结果
        这个对象的副本。
        另请参见:
        Cloneable
      • toString

        public String toString​()
        返回此日历的字符串表示形式。 此方法仅用于调试目的,并且返回的字符串的格式可能因实现而异。 返回的字符串可能为空,但可能不是null
        重写:
        toStringObject
        结果
        该日历的字符串表示形式。
      • toInstant

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

        转换创建Instant ,表示基于时间线,因为这同一点Calendar

        结果
        该时刻表示时间线上的相同点
        从以下版本开始:
        1.8