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

news2024/11/16 13:45:28

阅读建议

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

  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.coloradmin.cn/o/1272069.html

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

相关文章

【人工智能Ⅰ】实验6:回归预测实验

实验6 回归预测实验 一、实验目的 1:了解机器学习中数据集的常用划分方法以及划分比例,并学习数据集划分后训练集、验证集及测试集的作用。 2:了解降维方法和回归模型的应用。 二、实验要求 数据集(LUCAS.SOIL_corr-实验6数据…

Python list列表添加元素的3种方法及删除元素的3种方法

Python list列表添加元素的3种方法 Python list 列表增加元素可调用列表的 append() 方法,该方法会把传入的参数追加到列表的最后面。 append() 方法既可接收单个值,也可接收元组、列表等,但该方法只是把元组、列表当成单个元素,这…

LeetCode(45)最长连续序列【哈希表】【中等】

目录 1.题目2.答案3.提交结果截图 链接: 最长连续序列 1.题目 给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&a…

目标检测——SPPNet算法解读

论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 作者:Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun 链接:https://arxiv.org/abs/1406.4729 目录 1、算法概述2、Deep Networks with Spatia…

vue3使用动态component

使用场景: 多个组件通过component标签挂载在同一个组件中,通过触发时间进行动态切换。vue3与vue2用法不一样,这里有坑! 使用方法: 1.通过vue的defineAsyncComponent实现挂载组件 2.component中的is属性 父组件&am…

企业数字化转型应对传统网络挑战的关键策略

数字化变革正在以前所未有的速度和规模改变着我们的生活和工作方式,使得传统网络架构面临着巨大的挑战。其中包括带宽需求增加、多云应用增加、安全威胁增加以及传统网络设备无法满足需求等问题。 数字化时代需要更高速、更可靠、更安全的网络支持,传统网…

Python基础语法之学习字符串格式化

Python基础语法之学习字符串格式化 一、代码二、效果 一、代码 # 通过m.n控制 a 123 b 123.444 c 123.555 print("限制为5:%5d" % a) print("限制为2:%2d" % a) print("限制为5.2:%5.2f" % b) print("限制为5.2:%5.2f" % c)二、效…

商家门店小程序怎么做?门店小程序的优势和好处

生活服务类商家在当前数字化时代,越来越认识到门店小程序的重要性。门店小程序不仅为商家提供了一个在线展示的窗口,更为其打造了一个与消费者直接互动的平台。有了门店小程序,商家可以更加便捷地管理商品信息、订单流程,同时还能…

LRU缓存淘汰策略的实现——LinkedHashMap哈希链表

LRU(最近最少使用)缓存淘汰策略可以通过使用哈希链表实现。LinkedHashMap 是 Java 中提供的一种数据结构,它综合了哈希表和双向链表的特点,非常适合用来实现 LRU 缓存。 LinkedHashMap 内部维护了一个哈希表和一个双向链表。哈希…

WSL中安装的Pycharm如何在Windows的开始菜单中新建图标?或WSL中的Pycharm经常花屏

WSL中安装的Pycharm如何在Windows的开始菜单中新建图标?或WSL中的Pycharm经常花屏 ⚙️1.软件环境⚙️🔍2.问题描述🔍🐡3.解决方法🐡🤔4.结果预览🤔 ⚙️1.软件环境⚙️ Windows10 教育版64位 W…

建设银行新余市分行积极开展国债下乡宣传活动

近日,为了普及国债知识,提高农村居民对国债的认知度和投资意识,建设银行新余市分行组织员工前往下村开展了一场国债下乡宣传活动。 活动当天,工作人员早早地来到了下乡地点,悬挂起了国债宣传横幅,并摆放了…

学习k8s的介绍(一)

一、kubernetes及Docker相关介绍 1、kubernetes是什么 1-1、简称为k8s或kube,是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 声明式配置语法: kubectl create/apply/delete -f xx…

VS Code C++可视化调试配置Natvis,查看Qt、STL变量内容

VS Code C可视化调试配置Natvis 使用GlobalVisualizersDirectory Windows下 C:\Users\YourName\.vscode\extensions\ms-vscode.cpptools-1.18.5-win32-x64\debugAdapters\vsdbg\bin\Visualizers\Linux下 ~\.vscode\extensions\ms-vscode.cpptools-1.18.5-win32-x64\debugAd…

CANDENCE: PCB 如何高亮网络、器件

PCB 如何高亮网络、器件 开始前先学习一个单词:assign CANDECE 高亮网络 step1: 选择一个颜色:红色 step2: 筛选要高亮什么:网络 or 器件,这里选择网络。 step3:鼠标点击要高亮的网络: 这里是GND 这里…

帮亲戚个忙,闲来有事用php写个58商铺出租转让信息抓取

最近亲戚想做点小超市生意,但是又不懂互联网,信息获取有点闭塞。知道我身在互联网大潮中,想让我帮忙看看网上有没有商铺转让的。心想,这不是小菜一碟,大显身手的时候来了,大概去58瞅了瞅,这玩意…

切水果小游戏

欢迎来到程序小院 切水果 玩法&#xff1a;点击鼠标左键划过水果&#xff0c;快去切水果&#xff0c;看你能够获划出多少水果哦^^。开始游戏https://www.ormcc.com/play/gameStart/205 html <div id"game" class"game" style"text-align: center;…

Jmeter接口自动化测试断言之Json断言

json断言可以让我们很快的定位到响应数据中的某一字段&#xff0c;当然前提是响应数据是json格式的&#xff0c;所以如果响应数据为json格式的话&#xff0c;使用json断言还是相当方便的。 还是以之前的接口举例 Url: https://data.cma.cn/weatherGis/web/weather/weatherFcst…

盘点2023年元宇宙NFT+潮玩游戏的高级套路解析

元宇宙游戏的高级套路2.0 解析&#xff1a;有部分项目玩家都是老手了&#xff0c;都晓得看准就溜&#xff0c;打一枪就换个地方&#xff0c;其实都是知道跑不长&#xff0c;一手内幕消息运筹帷幄之中&#xff0c;但同样也有高级的项目统筹方&#xff0c;讲更大的商业故事吸引他…

采购业务中的组织概述

目录 一、采购和库存管理中组织单位的概览二、企业的组织结构三、采购中组织结构3.1采购组织3.2采购组 一、采购和库存管理中组织单位的概览 1、 客户端&#xff1a;在SAP ERP系统中&#xff0c;客户端通过三位数字定义&#xff0c;并代表这独立的数据记录和独立的业务流程。客…

LeetCode刷题---路径问题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、不同路径 题目链接&#xff1a;不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记…