java8 ChronoField日期时间枚举类-程序员宅基地

技术标签: java  java8新特性  

前言:

ChronoField是java8提供的一个枚举类,里面定义了很多表示日历的字段,提供基于字段的访问来操纵日期,时间或日期时间, 通过实现TemporalField来扩展标准字段集。

一:ChronoField类概要

包目录:java.time.temporal
类型:枚举类 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 = LocalDate.now();
System.out.println("当前日期:"+now);//2021-12-01
//LocalDate with(TemporalField field,long newValue)
System.out.println("下周二:"+now.plusWeeks(1).with(ChronoField.DAY_OF_WEEK, 2)); //2021-12-07
System.out.println("上周二:"+now.minusWeeks(1).with(ChronoField.DAY_OF_WEEK, 2)); //2021-11-23

LocalTime time = LocalTime.now();
System.out.println("当前时间:"+time);//18:07:47.992580600
//int get(TemporalField field)
System.out.println("小时:"+time.get(ChronoField.HOUR_OF_DAY));//18
System.out.println("分钟:"+time.get(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的范围介于(LocalDate.MIN.toEpochDay(),LocalDate.MAX.toEpochDay())之间。

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秒。

该字段严格定义为在所有日历系统中具有相同含义。 这对于确保日历之间的互操作是必要的。

参考链接:
https://nowjava.com/docs/java-api-11/java.base/java/time/temporal/ChronoField.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_49114503/article/details/121658418

智能推荐

[完全背包] 货币系统(完全背包+求方案数)_完全背包求具体方案-程序员宅基地

文章浏览阅读293次。文章目录0. 前言1. 完全背包+求方案数0. 前言相关:[背包] 背包问题算法模板(模板)强相关:[完全背包] 买书(完全背包+裸题)1. 完全背包+求方案数1021. 货币系统重点: 完全背包、求方案数和 [完全背包] 买书(完全背包+裸题) 一模一样。就注意下初始化 f[0]=1,优化到一维时,完全背包问题体积从小到大进行枚举即可。代码:#include <iostream>using namespace std;typedef long long _完全背包求具体方案

web_Tomcat服务部署._tomcat部署web项目-程序员宅基地

文章浏览阅读228次。一.Tomcat概述Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。二.Tomcat核心组件1.核心组件Web 容器:完成 W_tomcat部署web项目

Winner Winner——状压dp(待定)_if(winner(close),winner(close)*100,20),volstick;-程序员宅基地

文章浏览阅读152次。题目描述The FZU Code Carnival is a programming competetion hosted by the ACM-ICPC Training Center of Fuzhou University. The activity mainly includes the programming contest like ACM-ICPC and strive to p..._if(winner(close),winner(close)*100,20),volstick;

cocos2d-x动作系统浅析-程序员宅基地

文章浏览阅读129次。尊重作者劳动,转载时请标明文章出处。作者:Bugs Bunny地址:http://www.cnblogs.com/cocos2d-x/archive/2012/03/13/2393898.html在上一篇博文中我们对cocos2d-x的动作使用有了初步了解。今天,我们将通过阅读部分cocos2d-x源码来了解这个动作系统是如何运作的,以及在使用时还有什么细节需要特别注意。小弟初学cocos..._cocos2d-x 运动系统

Pytorch Random Erasing-程序员宅基地

文章浏览阅读3k次。RandomErasing 随机擦除训练模型时,随机选取一个图片的矩形区域,将这个矩形区域的像素值用随机值或者平均像素值代替,产生局部遮挡的效果。该数据增强可以与随机切除、随机翻转等数据增强结合起来使用。在ReID、图像分类领域可以作为升点trick。codeimport cv2import mathimport randomimport torchvision.transforms as transformsfrom torch.utils.tensorboard import .._pytorch random erasing

pyhton爬虫(9)——使用XPath提取网页信息_用xpath爬取百度首页的标题-程序员宅基地

文章浏览阅读3.2k次。1. XPath基础1.1 什么是XPath?XPath 是一门在 XML 文档中查找信息(节点)的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。1.2 节点节点是XML文档中最小构成单位,一共有7种:(1)元素节点(element)(2)属性节点(attribute)(3)文本节点(text)(4)名称命名节点(namespace)(5)处理命令节点(processing-ins_用xpath爬取百度首页的标题

随便推点

ThreadPoolTaskExecutor使用实践_threadpooltaskexecutor结合disposablebean-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏5次。后台开发中,经常有一些非主流程业务要处理,为了提升主业务处理速度,可使用ThreadPoolTaskExecutor线程池来异步处理配置 java config @Bean public ThreadPoolTaskExecutor taskExecutor() { ThreadPoolTaskExecutor poolExecutor = new Thread..._threadpooltaskexecutor结合disposablebean

在瑞萨CS+(Cube Suite+)使用中文注释及中文字符串的方法_瑞萨 cs+中文注释-程序员宅基地

文章浏览阅读1.8k次。一、测试环境瑞萨Cube Suite+ for CA,CX V4.00.00,其他请自行测试。二、设置1.在菜单Tool中,选中Options,在弹出的窗口中,进行如下图的设置:2.按下图步骤,在工程的Build Tool处右键,在“Kanji character code of source”处选择“ECU_JP(-ze)”..._瑞萨 cs+中文注释

Python dir、__builtin__内置函数_dir(__builtin__)-程序员宅基地

文章浏览阅读1.1k次。科学计数法:&gt;&gt; format(2**20, '.2e')'1.05e+06'小数 ⇒ 百分数&gt;&gt; format(.1234, '.1%')12.3%_dir(__builtin__)

AI中台架构模型解析-程序员宅基地

文章浏览阅读1.8k次。传统上,企业部署AI应用,一般通过单点开发的方式,即“烟囱式”架构部署AI应用。海量AI应用场景爆发使得原来传统的“烟囱式“AI开发流程无法跟上业务的快速变化,开发速度慢、周期长。越来越多..._ai中台模型

干货!推荐一个github上超过5万star的Java学习宝典-程序员宅基地

文章浏览阅读8.7k次,点赞51次,收藏12次。今天给大家推荐一个学习宝库:互联网 Java 工程师进阶知识完全扫盲。...

EntityWrapper 在and条件中嵌套or语句_entitywrapper or-程序员宅基地

文章浏览阅读4.6k次。想要写一个类似如下的语句:select * from table_1 where (coulmn_1 like '%XX%' or coulmn_1 like '%XX%') and del_flag='0'但是在实际执行过程中,mybatisplus将其解析成了:select * from table_1 where coulmn_1 like '%XX%' or coulmn_1 like '%XX%' and del_flag='0'显然,这里由于没有括号,条件是不一样的。使用andN_entitywrapper or