Module java.base
Package java.time.chrono

Class JapaneseDate

java.lang.Object
java.time.chrono.JapaneseDate
所有已实现的接口:
Serializable, Comparable<ChronoLocalDate>, ChronoLocalDate, Temporal, TemporalAccessor, TemporalAdjuster

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

此日期使用日本帝国历法。此历法主要在日本使用。

日本帝国历法与ISO历法相同,除了基于纪元的年份编号。预期年份被定义为等于ISO预期年份。

日本从明治6年开始使用公历。仅支持明治及以后的年代;不支持明治6年1月1日之前的日期。

例如,日本年份"Heisei 24"对应ISO年份"2012"。
调用japaneseDate.get(YEAR_OF_ERA)将返回24。
调用japaneseDate.get(YEAR)将返回2012。
调用japaneseDate.get(ERA)将返回2,对应JapaneseChronology.ERA_HEISEI

这是一个基于值的类;程序员应将相等的实例视为可互换的,不应将实例用于同步,否则可能会发生不可预测的行为。例如,在将来的版本中,同步可能会失败。应使用equals方法进行比较。

实现要求:
此类是不可变且线程安全的。
自版本:
1.8
参见:
  • Method Details

    • now

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

      这将查询默认时区中的系统时钟以获取当前日期。

      使用此方法将阻止使用替代时钟进行测试,因为时钟是硬编码的。

      返回:
      使用系统时钟和默认时区的当前日期,不为null
    • now

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

      这将查询系统时钟以获取当前日期。指定时区避免依赖默认时区。

      使用此方法将阻止使用替代时钟进行测试,因为时钟是硬编码的。

      参数:
      zone - 要使用的区域ID,不为null
      返回:
      使用系统时钟的当前日期,不为null
    • now

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

      这将查询指定时钟以获取当前日期-今天。使用此方法允许使用替代时钟进行测试。可以使用依赖注入引入替代时钟。

      参数:
      clock - 要使用的时钟,不为null
      返回:
      当前日期,不为null
      抛出:
      DateTimeException - 如果无法获取当前日期
    • of

      public static JapaneseDate of(JapaneseEra era, int yearOfEra, int month, int dayOfMonth)
      从纪元、年代、年份和月份字段获取表示日本历法系统中日期的JapaneseDate

      此方法返回具有指定字段的JapaneseDate。日期必须对该年份和月份有效,否则将抛出异常。

      日本的月份和日是与ISO历法系统相同的。当纪元更改时,它们不会重置。例如:

        64年1月6日昭和 = ISO 1989-01-06
        64年1月7日昭和 = ISO 1989-01-07
        1年1月8日平成 = ISO 1989-01-08
        1年1月9日平成 = ISO 1989-01-09
       
      参数:
      era - 日本纪元,不为null
      yearOfEra - 日本年份
      month - 日本年份的月份,从1到12
      dayOfMonth - 日本月份的日期,从1到31
      返回:
      日本历法系统中的日期,不为null
      抛出:
      DateTimeException - 如果任何字段的值超出范围,或者日期对于月份年份无效,或者日期不是日本纪元
    • of

      public static JapaneseDate of(int prolepticYear, int month, int dayOfMonth)
      从纪年、年份和月份字段获取表示日本历法系统中日期的JapaneseDate

      此方法返回具有指定字段的JapaneseDate。日期必须对该年份和月份有效,否则将抛出异常。

      日本的纪年、月份和日期与ISO历法系统相同。当纪元更改时,它们不会重置。

      参数:
      prolepticYear - 日本纪年
      month - 日本年份的月份,从1到12
      dayOfMonth - 日本月份的日期,从1到31
      返回:
      日本历法系统中的日期,不为null
      抛出:
      DateTimeException - 如果任何字段的值超出范围,或者日期对于月份年份无效
    • from

      public static JapaneseDate from(TemporalAccessor temporal)
      从临时对象获取JapaneseDate

      根据指定的临时对象获取日本历法系统中的日期。 TemporalAccessor表示一组任意的日期和时间信息,此工厂将其转换为JapaneseDate的实例。

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

      此方法与函数接口TemporalQuery的签名匹配,允许通过方法引用JapaneseDate::from来使用作为查询。

      参数:
      temporal - 要转换的临时对象,不为null
      返回:
      日本历法系统中的日期,不为null
      抛出:
      DateTimeException - 如果无法转换为JapaneseDate
    • getChronology

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

      Chronology表示正在使用的历法系统。年代和其他字段在ChronoField中由年表定义。

      指定者:
      getChronology 在接口 ChronoLocalDate
      返回:
      日本年表,不为null
    • getEra

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

      日本历法系统由JapaneseEra定义多个年代。

      指定者:
      getEra 在接口 ChronoLocalDate
      返回:
      适用于此日期的年代,不为null
    • lengthOfMonth

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

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

      指定者:
      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作为参数。字段是否受支持由字段决定。

      指定者:
      isSupported 在接口 ChronoLocalDate
      指定者:
      isSupported 在接口 TemporalAccessor
      参数:
      field - 要检查的字段,null返回false
      返回:
      如果此日期支持该字段,则为true;否则为false
    • getLong

      public long getLong(TemporalField field)
      从接口中复制的描述: TemporalAccessor
      获取指定字段的值为long类型。

      查询日期时间的指定字段的值。返回的值可能超出字段的有效值范围。如果日期时间无法返回该值,因为该字段不受支持或出于其他原因,将抛出异常。

      指定者:
      getLong 在接口 TemporalAccessor
      参数:
      field - 要获取的字段,不能为空
      返回:
      该字段的值
    • with

      public JapaneseDate with(TemporalField field, long newValue)
      从接口中复制的描述: ChronoLocalDate
      返回与此对象相同类型的对象,其中指定字段已更改。

      基于此对象创建一个新对象,其中指定字段的值已更改。例如,在LocalDate上,可以用于设置年、月或日期。返回的对象将具有与此对象相同的可观察类型。

      在某些情况下,更改字段的定义不完全明确。例如,如果目标对象是代表1月31日的日期,则将月份更改为2月将是不明确的。在这种情况下,字段负责解析结果。通常,它将选择前一个有效日期,例如,在此示例中为2月的最后一个有效日期。

      指定者:
      with 在接口 ChronoLocalDate
      指定者:
      with 在接口 Temporal
      参数:
      field - 要在结果中设置的字段,不能为空
      newValue - 结果中字段的新值
      返回:
      一个具有指定字段设置的相同类型的对象,不能为空
    • with

      public JapaneseDate with(TemporalAdjuster adjuster)
      返回调整后的与此对象相同类型的对象。

      根据指定调整器的规则调整此日期时间。简单的调整器可能只是设置一个字段,例如年字段。更复杂的调整器可能将日期设置为月份的最后一天。在TemporalAdjusters中提供了一些常见的调整选项。这些包括查找“月份的最后一天”和“下一个星期三”。调整器负责处理特殊情况,例如月份的长度变化和闰年。

      以下是一些示例代码,说明此方法的使用方式和原因:

        date = date.with(Month.JULY);        // 大多数关键类实现TemporalAdjuster
        date = date.with(lastDayOfMonth());  // 从Adjusters进行静态导入
        date = date.with(next(WEDNESDAY));   // 从Adjusters和DayOfWeek进行静态导入
       
      指定者:
      with 在接口 ChronoLocalDate
      指定者:
      with 在接口 Temporal
      参数:
      adjuster - 要使用的调整器,不能为空
      返回:
      具有指定调整的相同类型的对象,不能为空
      抛出:
      DateTimeException - 如果无法进行调整
      ArithmeticException - 如果发生数值溢出
    • plus

      public JapaneseDate plus(TemporalAmount amount)
      返回具有添加量的与此对象相同类型的对象。

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

      以下是一些示例代码,说明此方法的使用方式和原因:

        date = date.plus(period);                // 添加一个Period实例
        date = date.plus(duration);              // 添加一个Duration实例
        date = date.plus(workingDays(6));        // 示例用户编写的workingDays方法
       

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

      指定者:
      plus 在接口 ChronoLocalDate
      指定者:
      plus 在接口 Temporal
      参数:
      amount - 要添加的量,不能为空
      返回:
      具有指定调整的相同类型的对象,不能为空
      抛出:
      DateTimeException - 如果无法进行添加
      ArithmeticException - 如果发生数值溢出
    • minus

      public JapaneseDate minus(TemporalAmount amount)
      返回具有减去量的与此对象相同类型的对象。

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

      以下是一些示例代码,说明此方法的使用方式和原因:

        date = date.minus(period);               // 减去一个Period实例
        date = date.minus(duration);             // 减去一个Duration实例
        date = date.minus(workingDays(6));       // 示例用户编写的workingDays方法
       

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

      指定者:
      minus 在接口 ChronoLocalDate
      指定者:
      minus 在接口 Temporal
      参数:
      amount - 要减去的量,不能为空
      返回:
      具有指定调整的相同类型的对象,不能为空
      抛出:
      DateTimeException - 如果无法进行减去
      ArithmeticException - 如果发生数值溢出
    • plus

      public JapaneseDate plus(long amountToAdd, TemporalUnit unit)
      从接口复制的描述: ChronoLocalDate
      返回添加指定周期后与此对象类型相同的对象。

      此方法返回一个基于此对象的新对象,其中添加了指定的周期。例如,在LocalDate上,可以用来添加一定数量的年、月或日。返回的对象将具有与此对象相同的可观察类型。

      在某些情况下,更改字段的定义不完全。例如,如果目标对象是表示1月31日的日期,则添加一个月将是不明确的。在这种情况下,字段负责解析结果。通常它会选择前一个有效日期,例如在这个例子中将是2月的最后一个有效日期。

      指定者:
      plus 在接口 ChronoLocalDate
      指定者:
      plus 在接口 Temporal
      参数:
      amountToAdd - 要添加的指定单位的数量,可以为负数
      unit - 要添加的数量的单位,不能为空
      返回:
      添加了指定周期的相同类型的对象,不能为空
    • minus

      public JapaneseDate minus(long amountToSubtract, TemporalUnit unit)
      从接口复制的描述: ChronoLocalDate
      返回减去指定周期后与此对象类型相同的对象。

      此方法返回一个基于此对象的新对象,其中减去了指定的周期。例如,在LocalDate上,可以用来减去一定数量的年、月或日。返回的对象将具有与此对象相同的可观察类型。

      在某些情况下,更改字段的定义不完全。例如,如果目标对象是表示3月31日的日期,则减去一个月将是不明确的。在这种情况下,字段负责解析结果。通常它会选择前一个有效日期,例如在这个例子中将是2月的最后一个有效日期。

      指定者:
      minus 在接口 ChronoLocalDate
      指定者:
      minus 在接口 Temporal
      参数:
      amountToSubtract - 要减去的指定单位的数量,可以为负数
      unit - 要减去的数量的单位,不能为空
      返回:
      减去指定周期后的相同类型的对象,不能为空
    • atTime

      public final ChronoLocalDateTime<JapaneseDate> atTime(LocalTime localTime)
      从接口复制的描述: ChronoLocalDate
      将此日期与时间组合以创建一个ChronoLocalDateTime

      返回一个ChronoLocalDateTime,由此日期和指定时间组成。所有日期和时间的可能组合都是有效的。

      指定者:
      atTime 在接口 ChronoLocalDate
      参数:
      localTime - 要使用的本地时间,不能为空
      返回:
      由此日期和指定时间组成的本地日期时间,不能为空
    • until

      public ChronoPeriod until(ChronoLocalDate endDate)
      从接口复制的描述: ChronoLocalDate
      计算此日期与另一个日期之间的周期作为ChronoPeriod

      计算两个日期之间的周期。所有提供的年表都使用年、月和日来计算周期,但是ChronoPeriod API允许使用其他单位表示周期。

      起始点和结束点是this和指定的日期。如果结束在开始之前,则结果将为负数。年、月和日中的负号将相同。

      计算是使用此日期的年表执行的。如果需要,输入日期将被转换以匹配。

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

      指定者:
      until 在接口 ChronoLocalDate
      参数:
      endDate - 结束日期(不包括),可以是任何年表,不能为空
      返回:
      此日期与结束日期之间的周期,不能为空
    • equals

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

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

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

      指定者:
      equals 在接口 ChronoLocalDate
      参数:
      obj - 要检查的对象,null返回false
      返回:
      如果相等则为true
      参见:
    • hashCode

      public int hashCode()
      此日期的哈希码。
      指定者:
      hashCode 在接口 ChronoLocalDate
      返回:
      基于年表和日期的适当哈希码
      参见:
    • until

      public long until(Temporal endExclusive, TemporalUnit unit)
      从接口复制的描述: ChronoLocalDate
      计算以指定单位的形式直到另一个日期的时间量。

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

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

         // 这两行是等效的
         amount = start.until(end, MONTHS);
         amount = MONTHS.between(start, end);
       
      应根据哪种方式使代码更易读来选择。

      计算在此方法中为ChronoUnit实现。单位DAYSWEEKSMONTHSYEARSDECADESCENTURIESMILLENNIAERAS应该由所有实现支持。其他ChronoUnit值将抛出异常。

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

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

      指定者:
      until 在接口 ChronoLocalDate
      指定者:
      until 在接口 Temporal
      参数:
      endExclusive - 结束日期(不包括),将在相同年表中转换为ChronoLocalDate,不能为空
      unit - 用于测量时间量的单位,不能为空
      返回:
      此日期与结束日期之间的时间量
    • toString

      public String toString()
      从类复制的描述: Object
      返回对象的字符串表示形式。
      指定者:
      toString 在接口 ChronoLocalDate
      覆盖:
      toString 在类 Object
      返回值:
      对象的字符串表示形式。