0
点赞
收藏
分享

微信扫一扫

java8 ChronoField 日期时间枚举内容

java8 ChronoField日期时间枚举类

ChronoField是Java 8日期时间API中的一个枚举类,它包含了所有的日期时间字段,如年、月、日、星期、时、分、秒等。这个枚举类提供了统一的字段访问方式,使我们可以轻松获取日期时间对象中的某个字段信息。 例如,我们可以像下面这样使用ChronoField来获取LocalDate中的年、月、日信息:

LocalDate date = LocalDate.now();

int year = date.get(ChronoField.YEAR);  
int month = date.get(ChronoField.MONTH_OF_YEAR);  
int day = date.get(ChronoField.DAY_OF_MONTH); 

下表列出了ChronoField中的部分枚举值及其含义:

枚举值 含义
YEAR 年份
MONTH_OF_YEAR 年中的月份
DAY_OF_WEEK 一周中的第几日
DAY_OF_MONTH 月份中的第几日
DAY_OF_YEAR 年份中的第几日
WEEK_OF_WEEK_BASED_YEAR 基于周的年份的第几周
HOUR_OF_DAY 一天中的第几小时
CLOCK_HOUR_OF_DAY 一天的第几点钟时间
MINUTE_OF_HOUR 一小时的第几分钟
SECOND_OF_MINUTE 一分钟的第几秒
NANO_OF_SECOND 一秒中的纳秒部分
INSTANT_SECONDS 自1970-01-01T00:00:00Z的秒数
OFFSET_SECONDS 时区偏移seconds

枚举值范围

每个枚举值都有其允许的范围,我们可以使用getRange()方法获取:

value.getRange();  

例如:

YEAR.getRange();   //YearRange[MIN_VALUE=-999999999, MAX_VALUE=999999999]
MONTH_OF_YEAR.getRange(); //ValueRange[MIN=1, MAX=12]
DAY_OF_WEEK.getRange();  //ValueRange[MIN=1, MAX=7]

超出范围会抛出DateTimeException异常。

枚举值间的关系

某些枚举值之间有着严格的关系,例如:

  • 一年中的第几日(DAY_OF_YEAR) = 一月中的第几日(DAY_OF_MONTH) + 之前月份总天数之和
  • 一周中的第几日(DAY_OF_WEEK) = 一天中的小时数(HOUR_OF_DAY) / 24 + 1 我们可以利用这些关系来计算某个字段的值。

字段解析/格式化

在格式化和解析日期时间的过程中,ChronoField也起到很重要的作用。DateTimeFormatter要格式化哪些字段,需要传入相应的ChronoField枚举值。 例如:

//格式化年月日
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd");
f.format(date);  

//相当于 
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-", ChronoField.YEAR, "-MM-", ChronoField.MONTH_OF_YEAR,"-dd", ChronoField.DAY_OF_MONTH);
f.format(date);

在解析的过程中,需要传入ChronoField枚举值来指定要解析的字段。 ChronoField枚举类在日期时间API中处于核心位置,理解这个类的用法和作用可以更好的掌握日期时间API。

举报

相关推荐

0 条评论