模块 java.base

类 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 日历系统相同。 proleptic-year 被定义为等于 ISO proleptic-year。

日本从明治六年开始引入公历,只支持明治以后的纪元;不支持明治 6 月 1 日之前的日期。

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

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

实现要求:
这个类是不可变的和线程安全的。
自从:
1.8
参见:
  • 方法详情

    • 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

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

      参数:
      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)
      从 proleptic-year、month-of-year 和 day-of-month 字段中获取代表日本日历系统中日期的 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 - 要转换的时间对象,不为空
      返回:
      日本日历系统中的日期,不为空
      抛出:
      DateTimeException - 如果无法转换为 JapaneseDate
      参见:
    • getChronology

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

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

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

      public JapaneseEra  getEra()
      获取适用于该日期的纪元。

      日本日历系统有多个由 JapaneseEra 定义的纪元。

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

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

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

      指定者:
      lengthOfMonth 在接口 ChronoLocalDate
      返回:
      以天为单位的月份长度
    • isSupported

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

      这将检查是否可以针对指定字段查询此日期。如果为 false,则调用 range get 方法将抛出异常。

      如果该字段是一个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);    // most key classes implement TemporalAdjuster
       date = date.with(lastDayOfMonth()); // static import from Adjusters
       date = date.with(next(WEDNESDAY));  // static import from Adjusters and DayOfWeek
       
      指定者:
      with 在接口 ChronoLocalDate
      指定者:
      with 在接口 Temporal
      参数:
      adjuster - 要使用的调节器,不为空
      返回:
      进行了指定调整的同一类型的对象,不为空
      抛出:
      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 不能保证返回相同的日期时间。

      指定者:
      plus 在接口 ChronoLocalDate
      指定者:
      plus 在接口 Temporal
      参数:
      amount - 要添加的数量,不为空
      返回:
      进行了指定调整的同一类型的对象,不为空
      抛出:
      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 不能保证返回相同的日期时间。

      指定者:
      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 amountToAdd, TemporalUnit  unit)
      从接口 ChronoLocalDate 复制的描述
      返回与此对象相同类型并减去指定句点的对象。

      此方法返回一个基于此对象并减去指定时间段的新对象。例如,在 LocalDate 上,这可用于减去若干年、月或日。返回的对象将具有与该对象相同的可观察类型。

      在某些情况下,更改字段未完全定义。例如,如果目标对象是表示 3 月 31 日的日期,那么减去一个月就不清楚了。在这种情况下,字段负责解析结果。通常它会选择之前的有效日期,在本例中为 2 月的最后一个有效日期。

      指定者:
      minus 在接口 ChronoLocalDate
      指定者:
      minus 在接口 Temporal
      参数:
      amountToAdd - 要减去的指定单位的数量,可能为负数
      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
      返回:
      如果这等于另一个日期,则为真
      参见:
    • hashCode

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

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

      这根据单个 TemporalUnit 计算两个 ChronoLocalDate 对象之间的时间量。起点和终点是this和指定的日期。如果结束早于开始,结果将为负。传递给此方法的 Temporal 使用 Chronology.date(TemporalAccessor) 转换为 ChronoLocalDate。计算返回一个整数,表示两个日期之间的完整单位数。例如,可以使用 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 作为第一个参数并将转换后的输入时间作为第二个参数来获得此方法的结果。

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

      指定者:
      until 在接口 ChronoLocalDate
      指定者:
      until 在接口 Temporal
      参数:
      endExclusive - 结束日期,独占,在相同的时间顺序中转换为 ChronoLocalDate,不为空
      unit - 衡量数量的单位,不为空
      返回:
      此日期与结束日期之间的时间量
    • toString

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