欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Chronology

最编程 2024-04-25 22:22:33
...
日历系统,用于组织和识别日期。

主日期和时间API建立在ISO日历系统上。 年表在幕后操作以表示日历系统的一般概念。 例如,日本人,民国人,泰国人和其他人。

大多数其他日历系统也按照年,月,日的共同概念运作,与太阳周围的地球周围和地球周围的月球相关联。 这些共享概念由ChronoField定义,可供任何Chronology实现使用:

  LocalDate isoDate = ...
   ThaiBuddhistDate thaiDate = ...
   int isoYear = isoDate.get(ChronoField.YEAR);
   int thaiYear = thaiDate.get(ChronoField.YEAR); 
如图所示,尽管日期对象位于不同的日历系统中,由不同的Chronology实例表示,但两者都可以使用ChronoField上的相同常量进行ChronoField 有关此含义的完整讨论,请参阅ChronoLocalDate 一般来说,建议是使用已知的基于ISO的LocalDate ,而不是ChronoLocalDate

虽然Chronology对象通常使用ChronoField ,并且基于时代,年份,月份,日期的日期模型,但这不是必需的。 Chronology实例可能代表完全不同类型的日历系统,例如Mayan。

实际上, Chronology实例也可以作为工厂。 of(String)方法允许通过标识符查找实例,而ofLocale(Locale)方法允许按区域设置查找。

Chronology实例提供了一组方法来创建ChronoLocalDate实例。 日期类用于操纵特定日期。

  • dateNow()
  • dateNow(clock)
  • dateNow(zone)
  • date(yearProleptic, month, day)
  • date(era, yearOfEra, month, day)
  • dateYearDay(yearProleptic, dayOfYear)
  • dateYearDay(era, yearOfEra, dayOfYear)
  • date(TemporalAccessor)

添加新日历

应用程序可以扩展可用的年表集。 添加一个新的日历系统需要实现的写作ChronologyChronoLocalDateEra 特定于日历系统的大多数逻辑将在ChronoLocalDate实现中。 Chronology实施充当工厂。

为了能够发现其他年代表,使用了ServiceLoader 必须将文件添加到META-INF/services目录中,并使用名称“java.time.chrono.Chronology”列出实现类。 有关服务加载的更多详细信息,请参阅ServiceLoader。 对于按id或calendarType查找,系统首先会找到系统提供的日历,然后是应用程序提供的日历。

每个年表都必须定义一个在系统中唯一的年表ID。 如果年表表示由CLDR规范定义的日历系统,则日历类型是CLDR类型和CLDR变体(如果适用)的串联。

推荐阅读