深入了解Java8新特性-日期时间API之ChronoUnit、ChronoField

阅读建议

嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议:

  1. 本篇文章大概3000多字,预计阅读时间长需要5分钟。
  2. 本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章,建议收藏起来,方便时常学习与回顾,温故而知新。
  3. 创作不易,免费的点赞、关注,请走上一走,算是对博主一些鼓励,让我更有动力输出更多的干货内容。

注意

本文编写的单元测试是基于java11,具体的版本号是:11.0.19

ChronoUnit

ChronoUnit是Java 8中引入的一个枚举类,它定义了很多表示日期时间的枚举值,提供了基于单元的访问来操纵日期、时间或日期时间。ChronoUnit基于TemporalUnit接口实现,可以扩展标准单元集。这些单元适用于多个日历系统,例如大多数非ISO日历系统定义了年、月和日的单位,只是规则略有不同。每个单元的文档都说明了其运作方式。ChronoUnit是一个不可变的、线程安全的枚举,这意味着它适合在多线程环境中使用。

ChronoUnit的应用场景非常广泛,可以应用于各种需要处理和操纵日期时间的场景。以下是一些常见的应用场景:

  • 日期时间的格式化和解析:ChronoUnit可以用于将日期时间字符串格式化为特定的时间单位,例如将日期字符串转换为年、月、日等时间单位。同样,它也可以用于将日期时间字符串解析为日期时间对象,以便进一步处理。
  • 日期时间的加减运算:ChronoUnit提供了基于时间单位的加减运算方法,例如在日期上添加或减去一定的天数、月数或年数。这些方法可以帮助我们方便地进行日期时间的加减运算,用于计算日期时间的差异或者进行日期的推算。
  • 日历系统的转换:ChronoUnit适用于多个日历系统,因此可以用于不同日历系统之间的转换。例如,可以将基于ISO日历系统的日期时间转换为基于其他日历系统的日期时间,反之亦然。
  • 日期时间的查询和检索:ChronoUnit可以用于查询和检索日期时间的特定部分,例如获取当前日期的年份、月份、日期等。此外,它还可以用于查询和检索日期时间之间的间隔和关系,例如计算两个日期之间的天数差或者判断两个日期时间是否在同一年内。
  • 日期时间的格式化和可视化:ChronoUnit可以用于将日期时间格式化为特定的时间单位或者可视化呈现日期时间的结构。例如,可以将日期时间格式化为年、月、日或者小时、分钟、秒等不同的时间单位,或者将日期时间的各个部分以可视化的方式呈现出来。

实战示例

ChronoUnit.between() 是用于计算两个日期或时间之间的间隔。该方法接受两个 Temporal 类型的参数,并返回一个 long 类型的值,表示两个时间点之间的间隔。

@Test
public void test(){
    LocalDate localDate = LocalDate.of(2022, 11, 26);
    LocalDate localDate1 = LocalDate.of(2023, 11, 26);
    long totalDays = ChronoUnit.DAYS.between(localDate, localDate1);
    System.out.println(totalDays);//输出结果:365
}

ChronoUnit.addTo() 是一个方法,用于将指定的时间量添加到给定的日期或时间。它属于 java.time.temporal.ChronoUnit 类。

该方法接受两个参数:

  • long 类型的值,表示要添加的时间量。
  • Temporal 类型的值,表示要添加时间的日期或时间。
@Test
public void test() {
    LocalDate localDate = LocalDate.of(2022, 11, 26);
    LocalDate localDate1 = ChronoUnit.DAYS.addTo(localDate, 5);
    System.out.println(localDate1);//输出结果:2022-12-01
}

ChronoField

ChronoField是java8提供的一个枚举类,里面定义了很多表示日历的字段,提供基于字段的访问来操纵日期,时间或日期时间。 可以通过实现TemporalField来扩展标准字段集。ChronoField类概要包目录:java.time.temporal类型:枚举类public enum ChronoField implements TemporalField一组标准字段。 这组字段提供基于字段的访问来操纵日期,时间或日期时间。 可以通过实现TemporalField来扩展标准字段集。 这些字段旨在适用于多个日历系统。例如,大多数非ISO日历系统将日期定义为年,月和日,只是略有不同的规则。 每个字段的文档说明了它的运作方式。 实现要求:这是一个最终的,不可变的和线程安全的枚举。 这表示在一周内将周数与年初对齐的天数的概念。

ChronoField的应用场景非常广泛,可以用于各种需要处理和操纵日期时间的场景。以下是一些常见的应用场景:

  • 日期时间的格式化和解析:ChronoField可以用于将日期时间字符串格式化为特定的时间单位,例如将日期字符串转换为年、月、日等时间单位。同样,它也可以用于将日期时间字符串解析为日期时间对象,以便进一步处理。
  • 日期时间的加减运算:ChronoField提供了基于时间单位的加减运算方法,例如在日期上添加或减去一定的天数、月数或年数。这些方法可以帮助我们方便地进行日期时间的加减运算,用于计算日期时间的差异或者进行日期的推算。
  • 日历系统的转换:ChronoField适用于多个日历系统,因此可以用于不同日历系统之间的转换。例如,可以将基于ISO日历系统的日期时间转换为基于其他日历系统的日期时间,反之亦然。
  • 日期时间的查询和检索:ChronoField可以用于查询和检索日期时间的特定部分,例如获取当前日期的年份、月份、日期等。此外,它还可以用于查询和检索日期时间之间的间隔和关系,例如计算两个日期之间的天数差或者判断两个日期时间是否在同一年内。
  • 日期时间的格式化和可视化:ChronoField可以用于将日期时间格式化为特定的时间单位或者可视化呈现日期时间的结构。例如,可以将日期时间格式化为年、月、日或者小时、分钟、秒等不同的时间单位,或者将日期时间的各个部分以可视化的方式呈现出来。

实战示例

@Test
public void test6() {
    LocalDate localDate = LocalDate.now();
    int year = localDate.get(ChronoField.YEAR);//得到年份
    int month = localDate.get(ChronoField.MONTH_OF_YEAR);//得到月份
    int day = localDate.get(ChronoField.DAY_OF_MONTH);//得到当月中第几天
    int weekOfMonth = localDate.get(ChronoField.ALIGNED_WEEK_OF_MONTH);//得到当月的第几周
    System.out.println("year:" + year + ",month:" + month + ",day:" + day + ",weekOfMonth:" + weekOfMonth);
}

ChronoUnit与ChronoField的区别

ChronoUnit和ChronoField都是Java 8中引入的与日期和时间相关的类,它们的功能和应用场景有所不同。

  • ChronoUnit是一个枚举类,它定义了很多表示时间单位的枚举值,例如年、月、日、小时、分钟、秒等。ChronoUnit基于TemporalUnit接口实现,可以扩展标准时间单位集。它适用于多个日历系统,因此可以用于不同日历系统之间的转换。ChronoUnit提供了基于时间单位的加减运算方法,可以用于计算日期时间的差异或者进行日期的推算。此外,ChronoUnit还可以用于格式化和解析日期时间字符串,以及进行日期时间的查询和检索等操作。
  • ChronoField是另一个枚举类,它定义了很多表示日历的字段,例如年、月、日、星期、季度、月份等。ChronoField实现了TemporalField接口,可以用于获取和设置日期时间的字段值,以及进行日期时间的加减运算等操作。与ChronoUnit不同的是,ChronoField适用于多个日历系统,而且它是不可变的、线程安全的枚举类。ChronoField可以用于将日期时间格式化为特定的时间单位或者可视化呈现日期时间的结构。此外,ChronoField还可以用于查询和检索日期时间的特定部分,例如获取当前日期的年份、月份、日期等。

总之,ChronoUnit和ChronoField都是用于处理日期和时间的类,但它们的功能和应用场景有所不同。ChronoUnit主要用于处理时间单位和进行时间运算,而ChronoField主要用于处理日历字段和进行日期时间的格式化、查询和检索等操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/206506.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于AT89C51单片机的秒表设计

1.设计任务 利用单片机AT89C51设计秒表,设计计时长度为9:59:59,超过该长度,报警。创新:设置重启;暂停;清零等按钮。最后10s时播放音乐提示。 本设计是采用AT89C51单片机为中心,利用其…

Java arthas分析接口性能

一、环境准备 1、arthas文档: 简介 | arthas 2、下载arthas-boot.jar https://arthas.aliyun.com/arthas-boot.jar 二、启动arthas java -jar arthas-boot.jar 输入对应pid,进入对应服务 三、排查 1、执行命令: trac 类路径 方法名 tr…

万宾科技监测设备,可燃气体监测仪特点一览

万宾科技的监测设备种类繁多,包括可燃气体监测仪、管网水位监测仪、内涝积水监测仪等。其中可燃气体监测仪是万宾科技的核心产品之一,用于监测环境中可燃气体的浓度,适用于对甲烷气体浓度进行实时监测,应用于燃气管网、排水管网、…

【快速见刊|投稿优惠】2024年机电一体与自动化技术国际学术会议(IACMAT 2024)

2024年机电一体与自动化技术国际学术会议(IACMAT 2024) 2024 International Academic Conference on Mechatronics and Automation Technology(IACMAT 2024) 一【会议简介】 2024年机电一体与自动化技术国际学术会议(IACMAT 2024)即将召开,它以“机电一体&#xff0…

filebrat+elk+kafka实现远程收集日志

20.0.0.15 kafka1 20.0.0.30 kafka2 20.0.0.40 kafka3 20.0.0.10 logstashkibana 20.0.0.20 elasticsearch 20.0.0.60 elasticsearch 注意---一个input,output要有一个 filebeat.intput Nginx----kafka.conf httpd.conf 两边同时启动 时间同步

计算机软件的分类

以功能进行分类,计算机软件通常可以分为系统软件和应用软件两大类。 系统软件:系统软件是计算机运行和管理的基本软件,包括操作系统、驱动程序、系统工具和服务程序等。操作系统是系统软件的核心,负责管理计算机的硬件资源、提供用…

模拟算法【3】——1419.数青蛙

文章目录 🍥1. 题目🥮2. 算法原理🍡3. 代码实现 🍥1. 题目 题目链接:1419. 数青蛙 - 力扣(LeetCode) 给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 &…

EG20网口远程下载程序使用案例

EG20网口远程下载程序使用案例 前言:本文档主要说明了使用蓝蜂虚拟网络工具通过EG20网关的网口(LAN口)远程给PLC下载程序的步骤及其注意事项。使用蓝蜂虚拟网络工具,不仅支持程序的远程下载,同样支持程序的远程上传与…

Windows 基于 VMware 虚拟机安装银河麒麟高级服务器操作系统

前言 抱着学习的态度研究一下麒麟系统的安装 银河麒麟(KylinOS)原是在“863计划”和国家核高基科技重大专项支持下,国防科技大学研发的操作系统,后由国防科技大学将品牌授权给天津麒麟,后者在2019年与中标软件合并为…

代码随想录刷题题Day2

刷题的第二天,希望自己能够不断坚持下去,迎来蜕变。😀😀😀 刷题语言:C / Python Day2 任务 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵 II 1 有序数组的平方(重点:双指针…

snat与dnat

一.SNAT的原理介绍 1.应用环境 局域网主机共享单个公网IP地址接入Internet (私有IP不能在Internet中正常路由) 2.SNAT原理 源地址转换,根据指定条件修改数据包的源IP地址,通常被叫做源映谢 数据包从内网发送到公网时&#xf…

嵌入式数据传输及存储的C语言实现

各种类型的数据传输和存储就涉及到大小端的问题,首先要简单说下芯片的大小端问题,这里主要讨论Cortex-M内核。 M内核支持大端或者小端,实际应用中大部分内核都是小端。以STM32为例,全部都是小端,而且是芯片设计之初就固…

飞致云开源社区月度动态报告(2023年11月)

自2023年6月起,中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》,旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况,以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大屏…

Linux安全配置

进入ssh配置文件 vim /etc/ssh/sshd_config将port 22中的端口号改为5001 重启ssh服务 systemctl restart sshd拓展 sh与bash iptable与firewall ssh与sshd vps与ssh 参考: 【安全-SSH】SSH安全设置 - CSDN AppLinux VPS服务器SSH端口一键修改脚本​Linux脚本…

TA-Lib学习研究笔记——Price Transform (五)

TA-Lib学习研究笔记——Price Transform (五) 1.AVGPRICE Average Price 函数名:AVGPRICE 名称:平均价格函数 语法: real AVGPRICE(open, high, low, close) df[AVGPRICE] tlb.AVGPRICE(df[open],df[high],df[low…

量子力学:探索微观世界的奇妙之旅

量子力学:探索微观世界的奇妙之旅 引言 在21世纪初,我们逐渐进入了一个以信息技术为主导的新时代。在这个时代,量子力学作为一门研究物质世界微观结构、粒子间相互作用以及能量与信息转换的基础科学,对我们的生活产生了深远的影响…

【机器学习】线性模型之逻辑回归

文章目录 逻辑回归Sigmoid 函数概率输出结果预测值与真实标签之间的并不匹配交叉熵逻辑回归模型 梯度下降逻辑回归模型求解编程求解sklearn 实现,并查看拟合指标 逻辑回归 逻辑回归是一种广义线性模型,形式上引入了 S i g m o i d Sigmoid Sigmoid 函数…

波奇学C++:C++11的可变参数模板和emplace

可变参数模板 // args是参数包 template<class T,class ...Args> void _ShowList(T value, Args... args) {cout << sizeof...(args) << endl; // 2cout << value << " ";/*_ShowList(args...);*/} int main() {_ShowList(1,2,3); re…

快速了解ChatGPT(大语言模型)

目录 GPT原理&#xff1a;文字接龙&#xff0c;输入一个字&#xff0c;后面会接最有可能出现的文字。 GPT4 学会提问&#xff1a;发挥语言模型的最大能力 参考李宏毅老师的课快速了解大语言模型做的笔记&#xff1a; Lee老师幽默的开场&#xff1a; GPT&#xff1a;chat Ge…

SQL server 基线安全加固操作

账号管理、认证授权 ELK-Mssql-01-01-01 编号 ELK-Mssql-01-01-01 名称 为不同的管理员分配不同的账号 实施目的 应按照用户分配账号&#xff0c;避免不同用户间共享账号,提高安全性。 问题影响 账号混淆&#xff0c;权限不明确&#xff0c;存在用户越权使用的可能。 …