深入了解Java Period类,对时间段的精确控制

阅读建议

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

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

注意

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

Period

在Java中,Period类是用于表示时间段或周期的类。它通常用于日期和时间的计算和操作,可以方便地处理年、月、日等时间单位。下面是一个如何定义Period的示例:

@Test
public void test() {
    Period period = Period.of(1, 1, 1);//获得一个表示一年一个月一天的时间段
    LocalDate localDate = LocalDate.of(2023, 1, 1);
    LocalDate plus = localDate.plus(period);//计算当前日期加上指定的时间段后的日期
    System.out.println(plus);//输出结果:2024-02-02
    Period period1 = Period.ofYears(1);//获得一个表示一年的时间段
    Period period2 = Period.ofMonths(12);//获得一个表示十二个月的时间段
    Period period3 = Period.ofDays(30);//获得一个表示三十天的时间段
    Period period4 = Period.ofWeeks(1);//获得一个表示两周的时间段
}

核心方法

Period的核心方法包括:

  • Period.of(LocalDate startDate, LocalDate endDate):创建一个表示给定时间段的Period对象。
  • Period.between(LocalDate startDate, LocalDate endDate):创建一个表示给定时间段的Period对象,与起始日期和结束日期的时间顺序无关。
  • Period.getYears():返回时间段中的年数。
  • Period.getMonths():返回时间段中的月数。
  • Period.getDays():返回时间段中的天数。
  • Period.plus(Period period):将给定的Period对象加到当前Period对象上,返回一个新的Period对象。
  • Period.minus(Period period):将给定的Period对象从当前Period对象中减去,返回一个新的Period对象。
  • Period.between(LocalDateTime startDateTime, LocalDateTime endDateTime):创建一个表示给定时间段的Period对象,与起始日期和结束日期的时间顺序无关。
@Test
public void test1() {
    LocalDate localDate1 = LocalDate.of(2022, 1, 1);
    LocalDate localDate2 = LocalDate.of(2023, 12, 1);
    Period period = Period.between(localDate1, localDate2);
    System.out.println(period.getYears());//输出结果:1
    System.out.println(period.getMonths());//输出结果:11
    System.out.println(period.getDays());//输出结果:0,注意:这里的结果是对应的年、月、日的字段的值的差,与起始日期和结束日期的时间顺序无关
    //如果想要获取两个日期之间的差是多少天,可以这样:
    long days = localDate1.until(localDate2, ChronoUnit.DAYS);
    System.out.println(days);//输出结果:699
}
  • Period#plus(...):该方法接受一个Period对象作为参数,并将其加到当前Period对象上,返回一个新的Period对象。
@Test
public void test2() {
    Period period = Period.ofYears(1);//获得一个表示一年的时间段
    period.plus(Period.ofYears(1));//计算当前时间段加上一个1年时间后的时间段
    period.plusYears(1);//计算当前时间段加上一个1年时间后的时间段
    period.plusMonths(12);//计算当前时间段加上一个12个月时间后的时间段
    period.plusDays(365);//计算当前时间段加上一个365天时间后的时间段
}
  • Period#minus(...):该方法也接受一个Period对象作为参数,但它将从当前Period对象中减去给定的Period对象,返回一个新的Period对象。
@Test
public void test3() {
    Period period = Period.ofYears(1);//获得一个表示一年的时间段
    period.minus(Period.ofYears(1));//计算当前时间段减去一个1年时间后的时间段
    period.minusYears(1);//计算当当前时间段减去一个1年时间周期后的时间段
    period.minusMonths(12);//计算当前时间段减去一个12个月时间周期后的时间段
    period.minusDays(365);//计算当前时间段减去一个365天时间周期后的时间段
}

使用场景

Period类通常在需要表示和操作年、月、日等较大时间单位的情况下使用。例如,在日历应用程序中,可以使用Period类来计算两个日期之间的差值,或者在计划任务中,可以使用Period类来表示一个任务需要执行的时间段。此外,Period类还可以用于日期时间的格式化和解析,以及进行日历计算等操作。

总结

Period类的优点包括:

  1. 易于使用:Period类提供了许多简便的方法来操作时间段,例如plus()、minus()、multiply()、divide()等,使得操作变得更加简单。
  2. 适合表示较大时间单位:与Duration类相比,Period类更适合表示年、月、日等较大的时间单位,因为它的粒度更粗,不会因为纳秒等较小的单位而产生精度问题。

Period类的缺点包括:

  1. 精度问题:Period类的比较粒度较粗,只能精确到天、月、年等较大的单位,对于需要更高精度的时间段,例如毫秒、纳秒等,Period类无法满足需求。
  2. 不支持时区:Period类没有提供时区支持,因此在处理涉及不同时区的日期时间时,Period类无法很好地处理。
  3. 无法表示时间点的具体数值:Period类只能表示时间段,无法表示时间点的具体数值,例如当前的日期和时间等。

总之,Period类适用于需要表示和操作年、月、日等较大时间单位的情况,但在需要更高精度的时间段或者涉及不同时区的日期时间处理时,需要考虑使用其他类库。

上一篇:深入了解Java8新特性-日期时间API之ChronoUnit、ChronoField-CSDN博客

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

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

相关文章

聚焦数据库Serverless创新,就在2023亚马逊云科技re:Invent

11月28日,亚马逊云科技在其最新的re:Invent 2023大会上宣布了三项重要的serverless创新,这些创新将极大地简化客户在任何规模上分析和管理数据的能力。以下是这些发布的主要要点总结和分析。 Amazon Aurora Limitless Database的新功能: 功能…

骨传导耳机会影响听力么?盘点骨传导耳机的好处与坏处都有哪些?

先说结论,使用骨传导耳机是不会影响听力的!并且由于骨传导耳机的特殊传声原理,相比于传统的入耳式耳机,骨传导耳机拥有更多的优点,下面带大家了解一下骨传导耳机的优点和缺点都有哪些。 一、骨传导耳机的优点是什么&a…

分享80个菜单导航JS特效,总有一款适合您

分享80个菜单导航JS特效,总有一款适合您 80个菜单导航JS特效下载链接:https://pan.baidu.com/s/1NgNc759Kg1of_8vR7kaj6A?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,…

二叉树题目:二叉树的完全性检验

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题:二叉树的完全性检验 出处:958. 二叉树的完全性检验 难度 5 级 题目描述 要求 给定一个二叉树的根结点 root \texttt{root} root&…

Python更改YOLOv5、v7、v8,实现调用val.py或者test.py后生成pr.csv,然后再整合绘制到一张图上(使用matplotlib绘制)

1. 前提 效果图 不错的链接:YOLOV7训练模型分析 关于map的绘图、loss绘图,可参考:根据YOLOv5、v8、v7训练后生成的result文件用matplotlib进行绘图 v5、v8调用val.py,v7调用test.py(作用都是一样的,都是…

LED广告机在密闭箱体内的散热方法

在现代电子产品中,尤其是LED广告机这类大型设备的连续使用过程中,发热问题一直备受关注。以下简要介绍LED广告机在密闭的箱体内如何进行散热降温的有效方法。 1. 设计出风口 LED广告机背面通常设计有镂空矩形,即出风口,以确保空气…

Ubuntu20.04/Linux中常用软件的安装

文章目录 一、安裝与卸载微信二、安裝与卸载QQ三、安装Chrome浏览器并加入apt更新四、安裝VScode4.1 安装常用插件4.2 减小Ipch缓存: 五、安装代码对比工具Meld六、安裝WPS七、安装PDF阅读器Foxit Reader八、安装文献管理软件Zotero九、安装有道云笔记十、安装远程控…

分享66个菜单导航JS特效,总有一款适合您

分享66个菜单导航JS特效,总有一款适合您 66个菜单导航JS特效下载链接:https://pan.baidu.com/s/1dpGGbptx6hEKcBnTMNLIdA?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,…

mysql有哪些锁,理解各种表锁和行锁

全局锁 主要用于数据库的备份,但会使得备份期间不能有任何事务插入删除更新数据,这很影响实际业务。所以通常不用这个全局锁来完成数据库的备份。假设数据库的存储引擎支持可重复读,那么常见的方法是通过MVCC来实现的,也就是备份…

Shopee过期的折扣活动如何删除?Shopee促销商品如何下架?——站斧浏览器

商家们可以轻松删除虾皮过期活动以及下架促销商品,保持店铺的整洁和顾客的购物体验。那么shopee过期的折扣活动如何删除,shopee促销商品如何下架。 Shopee过期的折扣活动如何删除? 在删除虾皮过期活动时,商家们需要遵循以下步骤…

Java基本数据类型、包装类及拆装箱详解

Java的基本数据类型和对应的包装类是Java语言中处理数据的两个关键概念。基本数据类型提供了简单而高效的方式来存储数据,而包装类使得基本数据类型具有对象的特性。本文将深入探讨基本数据类型与包装类的应用场景及详细描述,并对自动拆箱和装箱的源码实…

SpringBoot:SpringMVC(上)

文章目录 前言一、SpringMVC是什么?1.1 MVC的定义:1.2 MVC 和 Spring MVC 的关系 二、Spring MVC 创建和连接2.1创建springmvc2.2接下来,创建⼀个 UserController 类,实现⽤户到 Spring 程序的互联互通,具体实现代码如…

Python 自动化办公:文件快速整理分类

平时桌面或文件夹内鱼龙混杂,各种类型的文件都有怎么办? 本篇文章中,我们将学习如何使用 Python 编写一个文件整理分类的脚本。 该脚本能够自动获取文件类型,并将文件按照类型整理到不同的子文件夹中。 先看下效果,…

低代码如何降低门槛、快速交付、实现可持续IT架构?

目录 低代码开发模式期望达成的目标 1.降低开发门槛 2.加快系统交付 3.建立可持续发展的IT架构 写在最后 低代码的概念,最早提出的时间是在2014年左右,随后一直处于上升期,随着前两年阿里、腾讯的相继入场,竞争逐步加大。低代…

【Virtual Box】显示界面后无反应

本文记录本人在使用Virtual Box中遇到的问题 1.Virtual Box启动后无反应点击菜单栏是可用的,但界面里的无法操作 【解决方法】:以管理员身份启动virtual Box

零基础学编程,中文编程工具构件之弹出菜单构件教程,中文编程工具下载

一、前言: 零基础自学编程,中文编程工具下载,中文编程工具构件之扩展系统菜单构件教程 编程系统化教程链接https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 给大家分享一款中文编程工具,零基础…

如何保持操纵机构丝杆的精度?

滚珠丝杆是操纵机构中的重要组成部分,可以传递较高的扭矩,并且具有低摩擦、高效率和快速响应的特性,这使得操纵机构能够实现高速、高精度的运动控制,这对于整个系统的性能和精度具有决定性的影响,保持操纵机构丝杆的精…

100G数据中心升级改造策略

视频流媒体的兴起和物联网设备的大幅增长带来数据量爆炸性增长,人们对算力的需求越来越大,网络的升级改造也成为每个数据中心关注的重点。为了应对网络压力,数据中心需要升级到100G及以上速率,为企业和用户提供高性能计算、存储和…

python读取所有sheet内容到另一个文件中

实现效果: 将原excel中的步骤、预期效果列按回车拆成多行数据,其余字段值填充其他数据 实现结果: # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your code. # Press Double Shift to search everyw…

SpringBoot-监听Nacos动态修改日志级别

目录 一、pom文件 二、项目配置文件 三、日志配置文件 四、日志监听类 五、日志动态修改服务类 线上系统的日志级别一般都是 INFO 级别,有时候需要查看 WARN 级别的日志,所以需要动态修改日志级别。微服务项目中使用 Nacos 作为注册中心&#xff0c…