深入了解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主要用于处理日历字段和进行日期时间的格式化、查询和检索等操作。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于gitlab的webhook集成jenkins,并在gitlab流水线中展示jenkins的job状态信息

文章目录 1. 环境信息2. gitlab 部署3. jenkins部署4. gitlab集成jenkins4.1 jenkins的凭据上保存gitlab的账号信息4.2 jenkins中配置gitlab的连接信息4.3 编写jenkins上pipeline文件4.4 jenkins上创建pipeline项目4.5 gitlab上配置webhooks事件4.6 测试 1. 环境信息 gitlab服…

LangChain 16 通过Memory记住历史对话的内容

LangChain系列文章 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索I…

Windows系列:windows2003-建立域

windows2003-建立域 Active Directory建立DNS建立域查看日志xp 加入域 Active Directory 活动目录是一个包括文件、打印机、应用程序、服务器、域、用户账户等对象的数据库。 常见概念:对象、属性、容器 域组件(Domain Component,DC&#x…

snat与dnat

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

Loki安装部署

Loki安装部署 1、Loki介绍 Loki 是受 Prometheus 启发由 Grafana Labs 团队开源的水平可扩展,高度可用的多租户日志聚合系统。开发语 言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索&…

<avue-crud/>,二级表头,children下字典项的dicUrl失效问题

目录 1.提出问题&#xff1a; 1.1 代码&#xff1a; 1.2 效果图&#xff1a;会发现处在children下的dicUrl失效了 2. 解决思路 3. 解决代码&#xff08;你要的都在这&#xff0c;看这里&#xff09; 1.提出问题&#xff1a; 在使用<avue-crud/>组件实现二级表头时&…

C++中异常的栈展开概念

C中的异常栈展开是指&#xff0c;当某个函数中有异常产生&#xff08;这里不考虑是主动抛出的还是被动产生的&#xff09;&#xff0c;在异常被捕获之前的函数调用链上&#xff0c;函数不会正常执行返回&#xff0c;即异常产生之后的程序逻辑不会被执行。 &#xff08;注意&…

Kafka的存储机制和可靠性

文章目录 前言一、Kafka 存储选择二、Kafka 存储方案剖析三、Kafka 存储架构设计四、Kafka 日志系统架构设计4.1、Kafka日志目录布局4.2、Kafka磁盘数据存储 五、Kafka 可靠性5.1、Producer的可靠性保证5.1.1、kafka 配置为 CP(Consistency & Partition tolerance)系统5.1.…

建堆的时间复杂度和堆排序

文章目录 建堆的时间复杂度向下调整建堆向上调整建堆 堆排序实现 建堆的时间复杂度 下面都以建大堆演示 向下调整建堆 void Adjustdown(HPDataType* a, int size,int parent) {int child parent * 2 1;while (child < size){if (child1<size&&a[child 1] &…

Pandas进阶:transform 数据转换的常用技巧

引言 本次给大家介绍一个功能超强的数据处理函数transform&#xff0c;相信很多朋友也用过&#xff0c;这里再次进行详细分享下。 transform有4个比较常用的功能&#xff0c;总结如下&#xff1a; 转换数值 合并分组结果 过滤数据 结合分组处理缺失值 一. 转换数值 pd.…

贪心算法的介绍

贪心算法&#xff08;又称贪婪算法&#xff09;是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解&#…

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

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

如何选择共模噪声滤波器

在当前电子产品中&#xff0c;绝大多数的高速信号都使用地差分对结构。 差分结构有一个好处就是可以降低外界对信号的干扰&#xff0c;但是由于设计的原因&#xff0c;在传输结构上还会受到共模噪声的影响。 共模噪声滤波器就可以用于抑制不必要的共模噪声&#xff0c;而不会对…

RNN:文本生成

文章目录 一、完整代码二、过程实现2.1 导包2.2 数据准备2.3 字符分词2.4 构建数据集2.5 定义模型2.6 模型训练2.7 模型推理 三、整体总结 采用RNN和unicode分词进行文本生成 一、完整代码 作者在文章开头地址中使用C实现了这一过程&#xff0c;为了便于理解&#xff0c;这里我…

Java将JavaFX程序最小化托盘

Windows最小化拖盘其实就是将程序放到托盘里面,需要的时候再点击托盘里面的应用图标,此时就可以正常使用应用了,托盘如下: 下面是一个简单的Java程序,可以把窗口最小化到系统托盘: import java.awt.*; import java.awt.event.*; import javax.swing.*;public class Tray…

Paraformer 语音识别原理

Paraformer(Parallel Transformer)非自回归端到端语音系统需要解决两个问题&#xff1a; 准确预测输出序列长度&#xff0c;送入预测语音信号判断包含多少文字。 如何从encoder 的输出中提取隐层表征&#xff0c;作为decoder的输入。 采用一个预测器&#xff08;Predictor&…

GPT带我学Openpyxl操作Excel

注&#xff1a;以下文字大部分文字和代码由GPT生成 一、openpyxl详细介绍 Openpyxl是一个用于读取和编写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它允许您使用Python操作Excel文件&#xff0c;包括创建新的工作簿、读取和修改现有工作簿中的数据、设置单元格格式以及编…

vue中.sync修饰符与$emit(update:xxx)双向数据绑定

文章目录 一、单向数据流二、props父子传值2.1、父组件2.2、子组件2.3、优缺点2.3.1、优点2.3.2、缺点 三、.sync修饰符双向绑定3.1、父组件3.2、子组件3.3、优缺点3.3.1、优点3.3.2、缺点 3.4、[文档](https://v2.cn.vuejs.org/v2/guide/components-custom-events.html#sync-%…

WPF应用开发之附件管理

在我们之前的开发框架中&#xff0c;往往都是为了方便&#xff0c;对附件的管理都会进行一些简单的封装&#xff0c;目的是为了方便快速的使用&#xff0c;并达到统一界面的效果&#xff0c;本篇随笔介绍我们基于SqlSugar开发框架的WPF应用端&#xff0c;对于附件展示和控件的一…

文献速递:机器学习在超声波非破坏性评估中的合成和增强训练数据综述(第一部分)— (机器学习方法在超声波检测中的概述)

文献速递&#xff1a;机器学习在超声波非破坏性评估中的合成和增强训练数据综述&#xff08;第一部分&#xff09;— &#xff08;机器学习方法在超声波检测中的概述&#xff09; Title 题目 A review of synthetic and augmented training data for machine learning in ul…