模块  java.base
软件包  java.time.chrono

Class JapaneseDate

  • 实现的所有接口
    SerializableComparable<ChronoLocalDate>ChronoLocalDateTemporalTemporalAccessorTemporalAdjuster

    public final class JapaneseDate
    extends Object
    implements ChronoLocalDate, Serializable
    日本帝国日历系统中的日期。

    本日期的运营时间为Japanese Imperial calendar 该日历系统主要在日本使用。

    除了基于时代的年份编号之外,日本帝国日历系统与ISO日历系统相同。 预感年定义为等于ISO预感年。

    日本从明治6开始引入公历。只支持明治及后来的时代; 不支持1月1日明治6日之前的日期。

    例如,日本年“Heisei 24”对应于ISO年份“2012”。
    致电japaneseDate.get(YEAR_OF_ERA)将返回24。
    致电japaneseDate.get(YEAR)将返回2012。
    致电japaneseDate.get(ERA)将返回2,对应于JapaneseChronology.ERA_HEISEI

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

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

      • now

        public static JapaneseDate now()
        在默认时区中从系统时钟获取当前JapaneseDate

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

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

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

        public static JapaneseDate now​(ZoneId zone)
        从指定时区的系统时钟获取当前JapaneseDate

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

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

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

        public static JapaneseDate now​(Clock clock)
        从指定的时钟获得当前的JapaneseDate

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

        参数
        clock - 要使用的时钟,不为空
        结果
        当前日期,不为空
        异常
        DateTimeException - 如果无法获得当前日期
      • of

        public static JapaneseDate of​(JapaneseEra era,
                                      int yearOfEra,
                                      int month,
                                      int dayOfMonth)
        从时代,年代,月份和日期字段获得表示日历系统中日期的JapaneseDate

        这将返回带有指定字段的JapaneseDate 该日必须对年和月有效,否则将抛出异常。

        日语月份和日期与ISO日历系统中的相同。 当时代变化时,它们不会被重置。 例如:

          6th Jan Showa 64 = ISO 1989-01-06
          7th Jan Showa 64 = ISO 1989-01-07
          8th Jan Heisei 1 = ISO 1989-01-08
          9th Jan Heisei 1 = ISO 1989-01-09 
        参数
        era - 日本时代,不是空的
        yearOfEra - 日本时代的一年
        month - 日本的一年中,从1到12
        dayOfMonth - 日本的一天,从1到31
        结果
        日历系统中的日期,不为空
        异常
        DateTimeException - 如果任何字段的值超出范围,或者月中的日期无效,或者日期不是日本时代
      • of

        public static JapaneseDate of​(int prolepticYear,
                                      int month,
                                      int dayOfMonth)
        JapaneseDate年,月份和日期字段获得表示日历系统中的日期的JapaneseDate

        这将返回带有指定字段的JapaneseDate 该日必须对年和月有效,否则将抛出异常。

        日本的早期,月份和日期与ISO日历系统中的相同。 当时代变化时,它们不会被重置。

        参数
        prolepticYear - 日本的普通年
        month - 日本的月份,从1到12
        dayOfMonth - 日本的一天,从1到31
        结果
        日历系统中的日期,不为空
        异常
        DateTimeException - 如果任何字段的值超出范围,或者月份的月份无效
      • from

        public static JapaneseDate from​(TemporalAccessor temporal)
        从时间对象获得JapaneseDate

        这基于指定的时间在日本日历系统中获得日期。 TemporalAccessor表示一组任意日期和时间信息,该工厂将其转换为JapaneseDate的实例。

        转换通常使用EPOCH_DAY字段,该字段在日历系统中标准化。

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

        参数
        temporal - 要转换的时态对象,而不是null
        结果
        日历系统中的日期,不为空
        异常
        DateTimeException - 如果无法转换为 JapaneseDate
        另请参见:
        Chronology.date(TemporalAccessor)
      • getChronology

        public JapaneseChronology getChronology()
        获取此日期的年表,即日历系统。

        Chronology表示正在使用的日历系统。 ChronoField中的时代和其他领域由年表定义。

        Specified by:
        getChronology in interface ChronoLocalDate
        结果
        日本年表,不是空的
      • getEra

        public JapaneseEra getEra()
        获取此日期适用的时代。

        日历系统具有由JapaneseEra定义的多个时代。

        Specified by:
        getEra in interface ChronoLocalDate
        结果
        适用于此日期的时代,不为空
      • lengthOfMonth

        public int lengthOfMonth()
        返回此日期表示的月份长度。

        这将返回以天为单位的月份长度。 月份长度与ISO日历系统的长度相匹配。

        Specified by:
        lengthOfMonth ,界面 ChronoLocalDate
        结果
        以天为单位的月份长度
      • isSupported

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

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

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

        • DAY_OF_WEEK
        • DAY_OF_MONTH
        • DAY_OF_YEAR
        • EPOCH_DAY
        • MONTH_OF_YEAR
        • PROLEPTIC_MONTH
        • YEAR_OF_ERA
        • YEAR
        • ERA
        所有其他ChronoField实例将返回false。

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

        Specified by:
        isSupported in interface ChronoLocalDate
        Specified by:
        isSupported接口 TemporalAccessor
        参数
        字段 - 要检查的字段,null返回false
        结果
        如果此日期支持该字段,则为true,否则为false
      • with

        public JapaneseDate with​(TemporalAdjuster adjuster)
        返回与此对象相同类型的调整对象,并进行调整。

        这将根据指定调整程序的规则调整此日期时间。 简单的调整器可能只是设置其中一个字段,例如年份字段。 更复杂的调整器可能会将日期设置为该月的最后一天。 TemporalAdjusters提供了一些常见的调整。 这些包括找到“月的最后一天”和“下周三”。 理算员负责处理特殊情况,例如不同长度的月份和闰年。

        一些示例代码指示使用此方法的方式和原因:

          date = date.with(Month.JULY);        // most key classes implement TemporalAdjuster
          date = date.with(lastDayOfMonth());  // static import from Adjusters
          date = date.with(next(WEDNESDAY));   // static import from Adjusters and DayOfWeek 
        Specified by:
        with在界面 ChronoLocalDate
        Specified by:
        with在界面 Temporal
        参数
        adjuster - 要使用的调整器,而不是null
        结果
        具有指定调整的相同类型的对象,而不是null
        异常
        DateTimeException - 如果无法进行调整
        ArithmeticException - 如果发生数字溢出
      • plus

        public JapaneseDate plus​(TemporalAmount amount)
        返回与此对象相同类型的对象,并添加一个量。

        这会调整此时间,根据指定数量的规则添加。 该数量通常为Period但可以是实现TemporalAmount接口的任何其他类型,例如Duration

        一些示例代码指示使用此方法的方式和原因:

          date = date.plus(period);                // add a Period instance
          date = date.plus(duration);              // add a Duration instance
          date = date.plus(workingDays(6));        // example user-written workingDays method 

        请注意,不能保证调用plus后跟minus返回相同的日期时间。

        Specified by:
        plus接口 ChronoLocalDate
        Specified by:
        plus在界面 Temporal
        参数
        amount - 要添加的金额,不为空
        结果
        具有指定调整的相同类型的对象,而不是null
        异常
        DateTimeException - 如果无法添加
        ArithmeticException - 如果发生数字溢出
      • minus

        public JapaneseDate minus​(TemporalAmount amount)
        返回与此对象相同类型的对象,并减去一定量。

        这会调整此时间,根据指定数量的规则减去。 该数量通常为Period但可以是实现TemporalAmount接口的任何其他类型,例如Duration

        一些示例代码指示使用此方法的方式和原因:

          date = date.minus(period);               // subtract a Period instance
          date = date.minus(duration);             // subtract a Duration instance
          date = date.minus(workingDays(6));       // example user-written workingDays method 

        请注意,调用plus后跟minus不能保证返回相同的日期时间。

        Specified by:
        minus ,界面 ChronoLocalDate
        Specified by:
        minus接口 Temporal
        参数
        amount - 要减去的金额,而不是空
        结果
        具有指定调整的相同类型的对象,而不是null
        异常
        DateTimeException - 如果无法进行减法
        ArithmeticException - 如果发生数字溢出
      • equals

        public boolean equals​(Object obj)
        将此日期与另一个日期进行比较,包括年表。

        将此JapaneseDate与另一个相比较,确保日期相同。

        仅比较类型为JapaneseDate对象,其他类型返回false。 要比较两个TemporalAccessor实例的日期,包括两个不同年代的日期,请使用ChronoField.EPOCH_DAY作为比较器。

        Specified by:
        equals in interface ChronoLocalDate
        参数
        obj - 要检查的对象,null返回false
        结果
        如果这等于另一个日期,则为true
        另请参见:
        Object.hashCode()HashMap
      • until

        public long until​(Temporal endExclusive,
                          TemporalUnit unit)
        从界面复制的说明: ChronoLocalDate
        根据指定的单位计算到另一个日期的时间量。

        这将根据单个TemporalUnit计算两个ChronoLocalDate对象之间的时间量。 起点和终点是this和指定日期。 如果结束在开始之前,结果将是否定的。 所述Temporal传递给此方法被转换为ChronoLocalDate使用Chronology.date(TemporalAccessor) 计算返回一个整数,表示两个日期之间的完整单位数。 例如,可以使用startDate.until(endDate, DAYS)计算两个日期之间的天startDate.until(endDate, DAYS)

        使用此方法有两种等效方法。 第一种是调用此方法。 第二个是使用TemporalUnit.between(Temporal, Temporal)

          // these two lines are equivalent
           amount = start.until(end, MONTHS);
           amount = MONTHS.between(start, end); 
        应该根据哪个使代码更具可读性来做出选择。

        计算在此方法中针对ChronoUnit实施 单位DAYSWEEKSMONTHSYEARSDECADESCENTURIESMILLENNIAERAS应该由所有的实现支持。 其他ChronoUnit值将引发异常。

        如果该单元不是ChronoUnit ,则此方法的结果是通过调用获得TemporalUnit.between(Temporal, Temporal)传递this作为第一个参数和转换后的输入时间作为第二个参数。

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

        Specified by:
        until在界面 ChronoLocalDate
        Specified by:
        until in interface Temporal
        参数
        endExclusive - 结束日期,独家,在同一年表中转换为 ChronoLocalDate ,不为null
        unit - 计量金额的单位,而不是空
        结果
        此日期和结束日期之间的时间量
      • toString

        public String toString()
        复制自类的说明: Object
        返回对象的字符串表示形式。 通常, toString方法返回一个“文本表示”此对象的字符串。 结果应该是简洁但信息丰富的表示,便于人们阅读。 建议所有子类都覆盖此方法。

        ObjecttoString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“ @ ”以及对象的哈希码的无符号十六进制表示形式组成。 换句话说,此方法返回一个等于值的字符串:

         getClass().getName() + '@' + Integer.toHexString(hashCode())
         
        Specified by:
        toString在界面 ChronoLocalDate
        重写:
        toString在课程 Object
        结果
        对象的字符串表示形式。