模块  java.base
软件包  java.time

Class MonthDay

  • 实现的所有接口
    SerializableComparable<MonthDay>TemporalAccessorTemporalAdjuster

    public final class MonthDay
    extends Object
    implements TemporalAccessor, TemporalAdjuster, Comparable<MonthDay>, Serializable
    ISO- --12-03 - 日,例如--12-03

    MonthDay是一个不可变的日期时间对象,表示月份和日期的组合。 可以获得可以从一个月和一天获得的任何字段,例如四分之一年。

    此课程不存储或代表年份,时间或时区。 例如,值“December 3rd”可以存储在MonthDay

    由于MonthDay没有一年,因此2月29日的闰日被认为是有效的。

    此类实现TemporalAccessor而不是Temporal 这是因为无法在没有外部信息的情况下定义2月29日是否有效,从而阻止执行正/负。 与此相关, MonthDay仅提供对查询的访问并设置字段MONTH_OF_YEARDAY_OF_MONTH

    ISO-8601日历系统是当今世界大部分地区使用的现代民用日历系统。 它等同于公历的格里高利历法系统,其中今天的闰年规则一直适用。 对于今天编写的大多数应用程序,ISO-8601规则是完全合适的。 但是,任何使用历史日期并要求它们准确的应用程序都会发现ISO-8601方法不合适。

    这是一个value-based班; MonthDay实例上使用身份敏感操作(包括引用相等( == ),标识哈希码或同步)可能会产生不可预测的结果,应该避免使用。 应使用equals方法进行比较。

    实现要求:
    这个类是不可变的和线程安全的。
    从以下版本开始:
    1.8
    另请参见:
    Serialized Form
    • 方法详细信息

      • now

        public static MonthDay now()
        从默认时区中的系统时钟获取当前月 - 日。

        这将在默认时区中查询system clock以获取当前月 - 日。

        使用此方法将无法使用备用时钟进行测试,因为时钟是硬编码的。

        结果
        使用系统时钟和默认时区的当前月 - 日,不为空
      • now

        public static MonthDay now​(ZoneId zone)
        从指定时区的系统时钟获取当前月 - 日。

        这将查询system clock以获取当前的月 - 日。 指定时区可避免依赖于默认时区。

        使用此方法将无法使用备用时钟进行测试,因为时钟是硬编码的。

        参数
        zone - 要使用的区域ID,不为空
        结果
        使用系统时钟的当前月 - 日,不为空
      • now

        public static MonthDay now​(Clock clock)
        从指定的时钟获得当前的月 - 日。

        这将查询指定的时钟以获取当前的月 - 日。 使用此方法允许使用备用时钟进行测试。 可以使用dependency injection引入备用时钟。

        参数
        clock - 要使用的时钟,不为空
        结果
        当前的月 - 日,而不是空
      • of

        public static MonthDay of​(Month month,
                                  int dayOfMonth)
        获得MonthDay的实例。

        月份必须在闰年内有效。 因此,对于二月,第29天是有效的。

        例如,4月和31日的通过会引发异常,因为任何一年都不可能有4月31日。 相比之下,允许在2月29日过去,因为该月日有时是有效的。

        参数
        month - 表示的月份而非空值
        dayOfMonth - 表示的日期,从1到31
        结果
        月 - 日,不是空
        异常
        DateTimeException - 如果任何字段的值超出范围,或者月份的月份无效
      • of

        public static MonthDay of​(int month,
                                  int dayOfMonth)
        获得MonthDay的实例。

        月份必须在闰年内有效。 因此,对于第2个月(2月),第29天是有效的。

        例如,在第4个月(4月)和第31天过去会抛出异常,因为任何一年都不可能有4月31日。 相比之下,允许在2月29日过去,因为该月日有时是有效的。

        参数
        month - 表示从1(1月)到12(12月)的月份
        dayOfMonth - 表示的日期,从1到31
        结果
        月 - 日,不是空
        异常
        DateTimeException - 如果任何字段的值超出范围,或者月份的月份无效
      • from

        public static MonthDay from​(TemporalAccessor temporal)
        从时态对象获得MonthDay的实例。

        这将根据指定的时间获得一个月 - 日。 TemporalAccessor表示一组任意日期和时间信息,该工厂将其转换为MonthDay的实例。

        转换提取MONTH_OF_YEARDAY_OF_MONTH字段。 仅当时态对象具有ISO年表,或者可以转换为LocalDate ,才允许提取。

        该方法匹配功能接口TemporalQuery的签名,允许其通过方法参考MonthDay::from用作查询。

        参数
        temporal - 要转换的临时对象,而不是null
        结果
        月 - 日,不是空
        异常
        DateTimeException - 如果无法转换为 MonthDay
      • parse

        public static MonthDay parse​(CharSequence text)
        从文本字符串(如--12-03获取MonthDay的实例。

        该字符串必须代表有效的月 - 日。 格式为--MM-dd

        参数
        text - 要解析的文本,例如“--12-03”,而不是null
        结果
        解析的月 - 日,而不是null
        异常
        DateTimeParseException - 如果无法解析文本
      • parse

        public static MonthDay parse​(CharSequence text,
                                     DateTimeFormatter formatter)
        使用特定格式化程序从文本字符串中获取MonthDay的实例。

        使用格式化程序解析文本,返回一个月的日期。

        参数
        text - 要解析的文本,而不是null
        formatter - 要使用的格式化程序,不为null
        结果
        解析的月 - 日,而不是null
        异常
        DateTimeParseException - 如果无法解析文本
      • isSupported

        public boolean isSupported​(TemporalField field)
        检查是否支持指定的字段。

        这将检查是否可以查询指定字段的月份日。 如果为false,则调用rangeget方法将引发异常。

        如果该字段是ChronoField则在此处执行查询。 支持的字段是:

        • MONTH_OF_YEAR
        • YEAR
        所有其他ChronoField实例将返回false。

        如果该字段不是ChronoField ,则通过调用TemporalField.isSupportedBy(TemporalAccessor)传递this作为参数来获得此方法的结果。 字段是否受支持由字段确定。

        Specified by:
        isSupported在界面 TemporalAccessor
        参数
        字段 - 要检查的字段,null返回false
        结果
        如果该字段在此月份日受支持,则为true,否则为false
      • range

        public ValueRange range​(TemporalField field)
        获取指定字段的有效值范围。

        范围对象表示字段的最小和最大有效值。 此月 - 日用于提高返回范围的准确性。 如果无法返回范围,因为不支持该字段或由于某些其他原因,将引发异常。

        如果该字段是ChronoField则在此处执行查询。 supported fields将返回适当的范围实例。 所有其他ChronoField实例将抛出UnsupportedTemporalTypeException

        如果该字段不是ChronoField ,则通过调用this作为参数调用TemporalField.rangeRefinedBy(TemporalAccessor)获得此方法的结果。 是否可以获得范围由该字段确定。

        Specified by:
        range在界面 TemporalAccessor
        参数
        字段 - 要查询范围的字段,而不是null
        结果
        字段的有效值范围,不为null
        异常
        DateTimeException - 如果无法获得该字段的范围
        UnsupportedTemporalTypeException - 如果不支持该字段
      • get

        public int get​(TemporalField field)
        int获取此月 - 日指定字段的值。

        这将在本月的日期查询指定字段的值。 返回的值将始终在该字段的有效值范围内。 如果无法返回该值,因为不支持该字段或由于某些其他原因,将引发异常。

        如果该字段是ChronoField则在此处执行查询。 supported fields将根据此月 - 日返回有效值。 所有其他ChronoField实例将抛出UnsupportedTemporalTypeException

        如果该字段是不是一个ChronoField ,则此方法的结果是通过调用获得TemporalField.getFrom(TemporalAccessor)传递this作为参数。 是否可以获得该值以及该值表示的值由该字段确定。

        Specified by:
        get ,界面 TemporalAccessor
        参数
        字段 - 要获取的字段,而不是null
        结果
        该字段的值
        异常
        DateTimeException - 如果无法获取该字段的值或该值超出该字段的有效值范围
        UnsupportedTemporalTypeException - 如果不支持该字段或值的范围超过 int
        ArithmeticException - 如果发生数字溢出
      • getLong

        public long getLong​(TemporalField field)
        long获取此月 - 日的指定字段的值。

        这将在本月的日期查询指定字段的值。 如果无法返回该值,因为不支持该字段或由于某些其他原因,将引发异常。

        如果该字段是ChronoField则在此处执行查询。 supported fields将根据此月 - 日返回有效值。 所有其他ChronoField实例将抛出UnsupportedTemporalTypeException

        如果该字段不是ChronoField ,则通过调用this作为参数调用TemporalField.getFrom(TemporalAccessor)获得此方法的结果。 是否可以获得该值以及该值表示的值由该字段确定。

        Specified by:
        getLong在界面 TemporalAccessor
        参数
        字段 - 要获取的字段,而不是null
        结果
        该字段的值
        异常
        DateTimeException - 如果无法获得该字段的值
        UnsupportedTemporalTypeException - 如果不支持该字段
        ArithmeticException - 如果发生数字溢出
      • getMonthValue

        public int getMonthValue()
        获取1到12之间的月份字段。

        此方法将月份作为int从1返回到12.如果通过调用getMonth()使用枚举Month则应用程序代码通常更清晰。

        结果
        月份,从1到12
        另请参见:
        getMonth()
      • getMonth

        public Month getMonth()
        使用Month枚举获取年份字段。

        此方法返回月份的枚举Month 这避免了int值的含义混淆。 如果需要访问原始值int则枚举提供int value

        结果
        一年中的月份,不是空的
        另请参见:
        getMonthValue()
      • getDayOfMonth

        public int getDayOfMonth()
        获取日期字段。

        此方法返回日期的原始值int

        结果
        每月,从1到31
      • isValidYear

        public boolean isValidYear​(int year)
        检查年份是否适用于本月。

        此方法检查此月份和日期以及输入年份是否构成有效日期。 这只能在2月29日返回false。

        参数
        year - 验证的一年
        结果
        如果年份对于本月 - 日有效,则为true
        另请参见:
        Year.isValidMonthDay(MonthDay)
      • withMonth

        public MonthDay withMonth​(int month)
        返回此MonthDay的副本,其中年份已更改。

        这将返回指定月份的月 - 日。 如果指定月份的日期无效,则该日期将调整为最后一个有效日期。

        此实例是不可变的,不受此方法调用的影响。

        参数
        month - 在返回的月份日中设置的月份,从1(1月)到12(12月)
        结果
        a MonthDay基于此月份的请求月份,不为空
        异常
        DateTimeException - 如果月份值无效
      • with

        public MonthDay with​(Month month)
        返回此MonthDay的副本,其中年份已更改。

        这将返回指定月份的月 - 日。 如果指定月份的日期无效,则该日期将调整为最后一个有效日期。

        此实例是不可变的,不受此方法调用的影响。

        参数
        month - 在返回的月 - 日中设置的月份,而不是null
        结果
        基于此月 - 日的请求月份的 MonthDay ,不为空
      • withDayOfMonth

        public MonthDay withDayOfMonth​(int dayOfMonth)
        返回此MonthDay的副本,并更改日期。

        这将返回指定日期的月 - 日。 如果该月的日期无效,则会引发异常。

        此实例是不可变的,不受此方法调用的影响。

        参数
        dayOfMonth - 在返回月 - 日中设置的日期,从1到31
        结果
        a MonthDay基于此请求日的当月,不为空
        异常
        DateTimeException - 如果日期值无效,或者月中的某一天无效
      • query

        public <R> R query​(TemporalQuery<R> query)
        使用指定的查询查询本月 - 日。

        这将使用指定的查询策略对象在本月查询。 TemporalQuery对象定义用于获取结果的逻辑。 阅读查询文档以了解此方法的结果。

        通过在指定的查询上调用TemporalQuery.queryFrom(TemporalAccessor)方法作为参数传递this来获得此方法的结果。

        Specified by:
        query in interface TemporalAccessor
        参数类型
        R - 结果的类型
        参数
        query - 要调用的查询,而不是null
        结果
        查询结果,可以返回null(由查询定义)
        异常
        DateTimeException - 如果无法查询(由查询定义)
        ArithmeticException - 如果发生数字溢出(由查询定义)
      • adjustInto

        public Temporal adjustInto​(Temporal temporal)
        调整指定的时间对象以具有此月 - 日。

        这将返回与输入相同的可观察类型的时间对象,其中月份和日期更改为与此相同。

        调整相当于使用Temporal.with(TemporalField, long)两次,通过ChronoField.MONTH_OF_YEARChronoField.DAY_OF_MONTH作为字段。 如果指定的时态对象不使用ISO日历系统,则抛出DateTimeException

        在大多数情况下,使用Temporal.with(TemporalAdjuster)更清楚地反转调用模式:

          // these two lines are equivalent, but the second approach is recommended
           temporal = thisMonthDay.adjustInto(temporal);
           temporal = temporal.with(thisMonthDay); 

        此实例是不可变的,不受此方法调用的影响。

        Specified by:
        adjustInto in界面 TemporalAdjuster
        参数
        temporal - 要调整的目标对象,而不是null
        结果
        调整后的对象,不为空
        异常
        DateTimeException - 如果无法进行调整
        ArithmeticException - 如果发生数字溢出
      • format

        public String format​(DateTimeFormatter formatter)
        使用指定的格式化程序在本月创建格式。

        此月 - 日将传递给格式化程序以生成字符串。

        参数
        formatter - 要使用的格式化程序,而不是null
        结果
        格式化的月 - 日字符串,不为空
        异常
        DateTimeException - 如果在打印期间发生错误
      • atYear

        public LocalDate atYear​(int year)
        将这个月和一年结合起来创建一个LocalDate

        这将返回从该月和指定年份形成的LocalDate

        如果年份不是闰年,则2月29日的月份将在结果日期调整为2月28日。

        此实例是不可变的,不受此方法调用的影响。

        参数
        year - 使用年份,从MIN_YEAR到MAX_YEAR
        结果
        从该月 - 日和指定年份形成的本地日期,不为空
        异常
        DateTimeException - 如果年份超出有效年限范围
      • compareTo

        public int compareTo​(MonthDay other)
        将这个月份的日期与另一个月份的日期进行比较。

        比较首先基于月份的值,然后基于当天的值。 它与“等于”一致,如Comparable所定义。

        Specified by:
        compareTo在界面 Comparable<MonthDay>
        参数
        other - 要比较的其他月份日,而不是null
        结果
        比较器值,如果更小则为负,如果更大则为正
      • isAfter

        public boolean isAfter​(MonthDay other)
        检查此月 - 日是否在指定的月 - 日之后。
        参数
        other - 要比较的其他月份日,而不是null
        结果
        如果这是在指定的月 - 日之后,则为true
      • isBefore

        public boolean isBefore​(MonthDay other)
        检查此月 - 日是否在指定的月 - 日之前。
        参数
        other - 要比较的其他月份日,而不是null
        结果
        如果此点在指定的月 - 日之前,则为true
      • equals

        public boolean equals​(Object obj)
        检查此月 - 日是否等于另一个月 - 日。

        比较基于一年中一个月中的时间线位置。

        重写:
        equals在课程 Object
        参数
        obj - 要检查的对象,null返回false
        结果
        如果这等于另一个月 - 日,则为true
        另请参见:
        Object.hashCode()HashMap
      • toString

        public String toString()
        本月的输出为String ,例如--12-03

        输出格式为--MM-dd

        重写:
        toString在类 Object
        结果
        此月 - 日的字符串表示形式,不为空