文章目录
- 前言:
- 一:ChronoField类概要
- 二:枚举值及含义
- 三:使用示例
前言:
ChronoField是java8提供的一个枚举类,里面定义了很多表示日历的字段,提供基于字段的访问来操纵日期,时间或日期时间, 通过实现TemporalField来扩展标准字段集。
一:ChronoField类概要
包目录:
类型:枚举类 public enum ChronoField implements TemporalField
一组标准字段。
这组字段提供基于字段的访问来操纵日期,时间或日期时间。 可以通过实现TemporalField来扩展标准字段集。
这些字段旨在适用于多个日历系统。 例如,大多数非ISO日历系统将日期定义为年,月和日,只是略有不同的规则。 每个字段的文档说明了它的运作方式。
实现要求:
这是一个最终的,不可变的和线程安全的枚举
。
二:枚举值及含义
Enum Constant | 描述 |
---|---|
ALIGNED_DAY_OF_WEEK_IN_MONTH | 一个月内对齐的星期几。 |
ALIGNED_DAY_OF_WEEK_IN_YEAR | 一年内对齐的星期几。 |
ALIGNED_WEEK_OF_MONTH | 一个月内对齐的一周。 |
ALIGNED_WEEK_OF_YEAR | 一年内对齐的一周。 |
AMPM_OF_DAY | 当天的AM / PM,从0(AM)到1(PM) |
CLOCK_HOUR_OF_AMPM | 计算AM / PM内的小时数,从1到12.这是在标准的12小时模拟挂钟上观察到的小时数 |
CLOCK_HOUR_OF_DAY | 小时,从1到24.这是在24小时模拟挂钟上观察到的小时 |
DAY_OF_MONTH | 天。当月第几天 |
DAY_OF_WEEK | 星期几,例如星期二。 |
DAY_OF_YEAR | 天。当年第几天 |
EPOCH_DAY | 该纪元日,基于1970-01-01(ISO)的Java时代。 |
ERA | 时代。 |
HOUR_OF_AMPM | 计算AM / PM内的小时数,12小时制,从0到11 |
HOUR_OF_DAY | 一天中的小时,24小时制,从0到23。这是在标准的24小时数字时钟上观察到的小时 |
INSTANT_SECONDS | 即时纪元。 |
MICRO_OF_DAY | 计算当天的微秒,从0到(24 * 60 * 60 * 1,000,000) - 1.此字段对于所有日历系统具有相同的含义 |
MICRO_OF_SECOND | 计算在秒内的微秒,从0到999,999。 该字段对于所有日历系统具有相同的含义 |
MILLI_OF_DAY | 当天的毫秒数,从0到(24 * 60 * 60 * 1,000) - 1 |
MILLI_OF_SECOND | 毫秒,从0到999.此字段对于所有日历系统具有相同的含义 |
MINUTE_OF_DAY | 一天中的分钟,从0到(24 * 60) - 1 |
MINUTE_OF_HOUR | 分钟,从0到59 |
MONTH_OF_YEAR | 一年中的月份,例如三月。 |
NANO_OF_DAY | 计算当天的纳秒,从0到(24 * 60 * 60 *1,000,000,000) - 1.该字段对于所有日历系统具有相同的含义 |
NANO_OF_SECOND | 计算在秒内的纳秒,从0到999,999,999。 该字段对于所有日历系统具有相同的含义。 |
OFFSET_SECONDS | 与UTC / Greenwich的偏差。 |
PROLEPTIC_MONTH | 基于预感月,从0年开始按月计数。 |
SECOND_OF_DAY | 计算当天的秒数,从0到(24 * 60 * 60) - 1 |
SECOND_OF_MINUTE | 计算分钟内的秒数,从0到59 |
YEAR | 即将到来的一年,如2012年。 |
YEAR_OF_ERA | 这个时代的一年。 |
三:使用示例
LocalDate now = ();
("当前日期:"+now);//2021-12-01
//LocalDate with(TemporalField field,long newValue)
("下周二:"+(1).with(ChronoField.DAY_OF_WEEK, 2)); //2021-12-07
("上周二:"+(1).with(ChronoField.DAY_OF_WEEK, 2)); //2021-11-23
LocalTime time = ();
("当前时间:"+time);//18:07:47.992580600
//int get(TemporalField field)
("小时:"+(ChronoField.HOUR_OF_DAY));//18
("分钟:"+(ChronoField.MINUTE_OF_HOUR));//7
ALIGNED_DAY_OF_WEEK_IN_MONTH
public static final ChronoField ALIGNED_DAY_OF_WEEK_IN_MONTH
一个月内对齐的星期几。
这表示星期与月初对齐的一周内的天数的概念。 该字段通常与ALIGNED_WEEK_OF_MONTH一起使用 。
例如,在具有七天工作周的日历系统中,第一个对齐的周工作日开始于第1个月,第二个对齐工作周从第8个月开始,依此类推。 在每个对齐周内,日期从1到7编号,并作为此字段的值返回。 因此,每月的1到7天将具有从1到7的星期值对齐。并且每月8到14天将重复此操作,其中每周的对齐值从1到1 7。
没有七天工作周的日历系统通常应以相同的方式实现此字段,但使用备用周长度。
ALIGNED_DAY_OF_WEEK_IN_YEAR
public static final ChronoField ALIGNED_DAY_OF_WEEK_IN_YEAR
一年内对齐的星期几。
这表示在一周内将周数与年初对齐的天数的概念。 该字段通常与ALIGNED_WEEK_OF_YEAR一起使用 。
例如,在具有七天工作周的日历系统中,第一个对齐周开始于第一年的第一天,第二个对齐周开始于第八年的日期,依此类推。 在每个对齐周内,日期从1到7编号,并作为此字段的值返回。 因此,第1年到第7年的每周日期值将从1到7保持一致。而日期8到14将重复此操作,并且每周的对齐值从1到1 7。
没有七天工作周的日历系统通常应以相同的方式实现此字段,但使用备用周长度。
EPOCH_DAY
public static final ChronoField EPOCH_DAY
该纪元日,基于1970-01-01(ISO)的Java时代。
此字段是1970-01-01(ISO)为零的连续天数。 请注意,这使用本地时间线,忽略偏移和时区。
该字段严格定义为在所有日历系统中具有相同含义。 这对于确保日历之间的互操作是必要的。
EpochDay的范围介于((),())之间。
ALIGNED_WEEK_OF_MONTH
public static final ChronoField ALIGNED_WEEK_OF_MONTH
一个月内对齐的一周。
这表示在一个月内将周数与月初对齐的周数的概念。 该字段通常与ALIGNED_DAY_OF_WEEK_IN_MONTH一起使用 。
例如,在具有七天工作周的日历系统中,第一个对齐的周工作日开始于第1个月,第二个对齐工作周从第8个月开始,依此类推。 因此,日期值1到7在对齐的第1周中,而日期值8到14在对齐的第2周中,依此类推。
没有七天工作周的日历系统通常应以相同的方式实现此字段,但使用备用周长度。
ALIGNED_WEEK_OF_YEAR
public static final ChronoField ALIGNED_WEEK_OF_YEAR
一年内对齐的一周。
这表示一周内的周数的概念,其中周数与年初对齐。 该字段通常与ALIGNED_DAY_OF_WEEK_IN_YEAR一起使用 。
例如,在具有七天工作周的日历系统中,第一个对齐周开始于第一年的第一天,第二个对齐周开始于第八年的日期,依此类推。 因此,日期值1到7在对齐的周1中,而日期值8到14在对齐的周2中,依此类推。
没有七天工作周的日历系统通常应以相同的方式实现此字段,但使用备用周长度。
PROLEPTIC_MONTH
public static final ChronoField PROLEPTIC_MONTH
基于预感月,从0年开始按月计数。
该字段是月份的连续计数,其中在预感年零的第一个月具有零值。 后来几个月的价值越来越大。 早些月的价值越来越小。 几个月的顺序没有间隙或中断。 请注意,这使用本地时间线,忽略偏移和时区。
在默认的ISO日历系统中,2012年6月的值为(2012 * 12 + 6 - 1) 。 该字段主要供内部使用。
非ISO日历系统必须按照上面的定义实现此字段。 它只是从预感0年开始经过几个月的简单零基数。所有具有完整的预感年定义的日历系统将具有零年。 如果日历系统的最小年份不包括零年份,则必须外推一个,以便定义此方法。
YEAR_OF_ERA
public static final ChronoField YEAR_OF_ERA
这个时代的一年。
这代表了时代内的年度概念。 该字段通常与ERA一起使用 。
日期的标准心理模型基于三个概念 - 年,月和日。 这些映射到YEAR , MONTH_OF_YEAR和DAY_OF_MONTH领域。 请注意,没有提及时代。 日期的完整模型需要四个概念 - 时代,年,月和日。 这些映射到ERA , YEAR_OF_ERA , MONTH_OF_YEAR和DAY_OF_MONTH领域。 是否使用此字段或YEAR取决于使用的心智模型。 有关此主题的更多讨论,请参见ChronoLocalDate 。
在默认的ISO日历系统中,有两个定义的时间,'BCE'和'CE'。 时代'CE'是目前正在使用的时代,时代的年代从1到最大值。 'BCE'时代是前一个时代,时代倒退。
例如,每次减去一年产生以下结果:
- 年度保证2 ='CE'年代2
- 年度保证1 ='CE'年代1
- 年度保证0 ='BCE'年代1
- 年 - 保证-1 ='BCE'年代2
请注意,ISO-8601标准实际上并未定义时代。 另请注意,由于Julian和Gregorian日历系统之间的变化,ISO时代与众所周知的AD / BC时代不一致。
非ISO日历系统应使用日历系统用户最公认的年份值来实现此字段。 由于大多数日历系统只有两个时代,因此年代编号方法通常与ISO日历系统使用的相同。 时代的价值通常应该是正值,但这不是必需的。
YEAR
public static final ChronoField YEAR
即将到来的一年,如2012年。
这代表了年份的概念,按顺序计数并使用负数。 这个时代的解释并不是对这个时代的解释。 请参阅YEAR_OF_ERA ,以获取显示从无效年份到年份的映射的示例。
日期的标准心理模型基于三个概念 - 年,月和日。 这些映射到YEAR , MONTH_OF_YEAR和DAY_OF_MONTH领域。 请注意,没有提及时代。 日期的完整模型需要四个概念 - 时代,年,月和日。 这些映射到ERA , YEAR_OF_ERA , MONTH_OF_YEAR和DAY_OF_MONTH领域。 是否使用此字段或YEAR_OF_ERA取决于正在使用的心智模型。 有关此主题的更多讨论,请参见ChronoLocalDate 。
非ISO日历系统应按如下方式实现此字段。 如果日历系统在固定日期之前和之后只有两个时代,那么预感年值必须与后一时代的年代价值相同,并且对于早期时代越来越不利。 如果日历系统具有两个以上的时间,那么可以用任何适当的值来定义预感年值,尽管将其定义为与ISO相同可能是最佳选择。
ERA
public static final ChronoField ERA
时代。
这代表了时代的概念,这是时间线的最大分支。 该字段通常与YEAR_OF_ERA一起使用 。
在默认的ISO日历系统中,有两个定义的时间,'BCE'和'CE'。 时代'CE'是目前正在使用的时代,时代的年代从1到最大值。 'BCE'时代是前一个时代,时代倒退。 有关完整示例,请参见YEAR_OF_ERA 。
非ISO日历系统应实现此字段以定义时代。 必须为1970-01-01(ISO)上激活的时代的值赋值1.早期的时间必须具有连续的较小值。 后来的时代必须有更大的值,
INSTANT_SECONDS
public static final ChronoField INSTANT_SECONDS
即时纪元。
这表示1970-01-01T00:00Z(ISO)为零的连续秒数的概念。 该字段可以与NANO_OF_SECOND一起使用以表示第二个的分数。
Instant表示时间线上的瞬时点。 就其本身而言,瞬间没有足够的信息来允许获得本地日期时间。 只有与偏移或时区配对才能计算本地日期或时间。
该字段严格定义为在所有日历系统中具有相同含义。 这对于确保日历之间的互操作是必要的。
OFFSET_SECONDS
public static final ChronoField OFFSET_SECONDS
与UTC / Greenwich的偏差。
这代表了UTC / Greenwich当地时间偏移量的概念。
ZoneOffset表示当地时间与UTC /格林威治不同的时间段。 这通常是固定的小时数和分钟数。 它相当于以秒为单位的偏移量的total amount 。 例如,在冬季,巴黎的偏移量为+01:00 ,即3600秒。
该字段严格定义为在所有日历系统中具有相同含义。 这对于确保日历之间的互操作是必要的。
参考链接:
/docs/java-api-11//java/time/temporal/