深入了解Java Duration类,对时间的精细操作

阅读建议

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

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

注意

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

Duration

Duration 是 Java 中表示时间段的类,用于计算两个时间点之间的间隔。它包含秒(seconds)和纳秒(nanos)两个部分,可以表示毫秒及更小的时间单位。与 Java 中的其他时间类不同,Duration 不包含毫秒这个属性。

@Test
public void test(){Duration duration=Duration.of(60, ChronoUnit.SECONDS);LocalDateTime localDateTime = LocalDateTime.of(2023, 1, 1, 13, 1, 1);LocalDateTime plus = localDateTime.plus(duration);//计算当前日期时间,加上指定时间段后的日期时间System.out.println(plus);//输出结果:2023-01-01T13:02:01
}

与Period类相比,Duration类和Period类都用于表示时间段,但它们在表示的时间单位和使用方式上有所不同。Period类主要用于表示年、月、日等较大的时间单位,而Duration类主要用于表示更小的时间单位,例如毫秒、纳秒等。此外,Period类提供了一些方法来获取时间段中的年、月、日等信息,而Duration类则提供了更多的方法来进行时间计算和操作。在实际使用过程中,Duration类和Period类都可以用于表示天的时间段,其他的不行,会抛出异常。

@Test
public void test2(){Duration duration=Duration.of(1,ChronoUnit.DAYS);Period period = Period.ofDays(1);System.out.println(period.getDays() == duration.toDays());
}

核心方法

Duration的核心方法包括:

Duration#of(...)

  • Duration#of(long duration):这个方法用于创建一个表示给定持续时间的Duration对象,单位为纳秒。持续时间可以是从零到Long.MAX_VALUE之间的任何值。
  • Duration.of(long amount, TemporalUnit unit) 用于创建表示特定时间单位的持续时间对象。该方法接受两个参数:amount:表示持续时间的长整型数值。unit:表示时间单位的 TemporalUnit 枚举类型或其子类。
  • Duration#ofDays(long days):这个方法用于创建一个表示给定天数的Duration对象。
  • Duration#ofHours(long hours):这个方法用于创建一个表示给定小时数的Duration对象。
  • Duration#ofMinutes(long minutes):这个方法用于创建一个表示给定分钟数的Duration对象。
  • Duration#ofSeconds(long seconds):这个方法用于创建一个表示给定秒数的Duration对象。
  • Duration#ofMillis(long millis):这个方法用于创建一个表示给定毫秒数的Duration对象。
  • Duration#ofNanos(long nanos):这个方法用于创建一个表示给定纳秒数的Duration对象。
@Test
public void test2() {Duration duration = Duration.of(1, ChronoUnit.DAYS);duration = Duration.ofDays(1);duration = Duration.ofHours(24);duration = Duration.ofMinutes(60);duration = Duration.ofSeconds(60);duration = Duration.ofMillis(1000);LocalDateTime localDateTime = LocalDateTime.of(2023, 1, 1, 13, 1, 1);LocalDateTime plus = localDateTime.plus(duration);//计算当前日期时间加上指定时间段后的日期时间System.out.println(plus);//输出结果:2023-01-01T13:01:02
}

Duration#between(...)

Duration.between(LocalDateTime start, LocalDateTime end)用于计算两个 LocalDateTime 对象之间的持续时间。该方法接受两个参数:start:表示起始时间的 LocalDateTime 对象。end:表示结束时间的 LocalDateTime 对象,返回值是Duration对象;

@Test
public void test3() {LocalDateTime localDateTime1 = LocalDateTime.of(2023, 1, 1, 13, 1, 1);LocalDateTime localDateTime2 = LocalDateTime.of(2023, 1, 1, 15, 1, 1);Duration duration = Duration.between(localDateTime1, localDateTime2);long seconds = duration.getSeconds();System.out.println(seconds);//输出结果:7200
}

Duration#get(...)

  • Duration#get(...): 此方法返回在给定单位中的持续时间。它接受一个 java.time.temporal.TemporalUnit 参数,并返回该单位的数量。例如,如果你使用 java.time.temporal.ChronoUnit.SECONDS,此方法将返回持续时间中的秒数。
  • Duration#getUnits(...): 此方法返回此持续时间包含的单位数。这通常与 get() 方法一起使用,以确定持续时间的长度,但不具体到秒或纳秒。例如,如果你有一个持续时间为2天、3小时、4分钟和5秒,那么 getUnits() 将返回一个包含这些单位的 long[] 数组。
  • Duration#getSeconds(...): 此方法返回此持续时间中的秒数部分。需要注意的是,这与 get(java.time.temporal.ChronoUnit.SECONDS) 方法略有不同,后者将考虑任何溢出到分钟、小时或天数的秒数。
  • Duration#getNano(...): 此方法返回此持续时间中的纳秒数部分。与秒一样,这不会考虑任何溢出到更高单位的纳秒数。
@Test
public void test4() {Duration duration = Duration.ofHours(2);List<TemporalUnit> units = duration.getUnits();System.out.println(units.toString());//输出结果:[Seconds, Nanos]long seconds = duration.get(ChronoUnit.SECONDS);System.out.println(seconds);//输出结果:7200long seconds1 = duration.getSeconds();System.out.println(seconds1);//输出结果:7200duration = Duration.ofNanos(10000);int nano = duration.getNano();System.out.println(nano);//输出结果:10000
}

Duration#plus(...)

  • Duration#plus(...)用于将当前Duration对象与另一个Duration对象相加,返回一个新的Duration对象,表示两个时间段的总和。
  • Duration#plusDays(...)用于将当前Duration对象与指定的天数相加,返回一个新的Duration对象,表示增加天数后的时间段。
  • Duration#plusHours(...)用于将当前Duration对象与指定的小时数相加,返回一个新的Duration对象,表示增加小时数后的时间段。
  • Duration#plusMinutes(...)用于将当前Duration对象与指定的分钟数相加,返回一个新的Duration对象,表示增加分钟数后的时间段。
  • Duration#plusSeconds(...)用于将当前Duration对象与指定的秒数相加,返回一个新的Duration对象,表示增加秒数后的时间段。
  • Duration#plusMillis(...)用于将当前Duration对象与指定的毫秒数相加,返回一个新的Duration对象,表示增加毫秒数后的时间段。
  • Duration#plusNanos(...)用于将当前Duration对象与指定的纳秒数相加,返回一个新的Duration对象,表示增加纳秒数后的时间段。
@Test
public void test5() {LocalDateTime localDateTime = LocalDateTime.of(2023, 1, 1, 15, 1, 1);Duration duration = Duration.ofHours(2);//定义一个2小时的时间段duration=duration.plus(60,ChronoUnit.MINUTES);//当前时间段加上60分钟duration=duration.plusDays(1);//当前时间段加上1天duration=duration.plusHours(1);//当前时间段加上1小时duration=duration.plusMinutes(60);//当前时间段加上60分钟duration=duration.plusSeconds(60);//当前时间段加上60秒LocalDateTime plus = localDateTime.plus(duration);//计算当前日期时间,加上当前的时间段后的日期时间System.out.println(plus);//输出结果:2023-01-02T20:02:01
}

Duration#minus(...)

  • Duration#minus(...): 用于从一个Duration对象中减去另一个Duration对象。它返回一个新的Duration对象,表示当前Duration对象与减去的那一个之间的差值。
  • Duration#minusDays(...): 用于从一个Duration对象中减去一定数量的天数。它返回一个新的Duration对象,表示当前Duration对象减去指定天数后的结果。
  • Duration#minusHours(...): 用于从一个Duration对象中减去一定数量的小时数。它返回一个新的Duration对象,表示当前Duration对象减去指定小时数后的结果。
  • Duration#minusMinutes(...): 用于从一个Duration对象中减去一定数量的分钟数。它返回一个新的Duration对象,表示当前Duration对象减去指定分钟数后的结果。
  • Duration#minusSeconds(...): 用于从一个Duration对象中减去一定数量的秒数。它返回一个新的Duration对象,表示当前Duration对象减去指定秒数后的结果。
  • Duration#minusMillis(...): 用于从一个Duration对象中减去一定数量的毫秒数。它返回一个新的Duration对象,表示当前Duration对象减去指定毫秒数后的结果。
  • Duration#minusNanos(...): 用于从一个Duration对象中减去一定数量的纳秒数。它返回一个新的Duration对象,表示当前Duration对象减去指定纳秒数后的结果。
@Test
public void test6() {LocalDateTime localDateTime = LocalDateTime.of(2023, 1, 10, 15, 1, 1);Duration duration = Duration.ofHours(2);//定义一个2小时的时间段duration = duration.minus(60, ChronoUnit.MINUTES);//当前时间段减去60分钟duration = duration.minusDays(1);//当前时间段减去1天duration = duration.minusHours(1);//当前时间段减去1小时duration = duration.minusMinutes(60);//当前时间段减去60分钟duration = duration.minusSeconds(60);//当前时间段减去60秒LocalDateTime minus = localDateTime.minus(duration);//计算当前日期时间,减去当前的时间段后的日期时间System.out.println(minus);//输出结果:2023-01-11T16:02:01
}

Duration#toDays()

  • Duration#toDays(): 将Duration对象转换为天数。它返回一个整数值,表示时间段中包含的天数。
  • Duration#toHours(): 将Duration对象转换为小时数。它返回一个整数值,表示时间段中包含的小时数。
  • Duration#toMinutes(): 将Duration对象转换为分钟数。它返回一个整数值,表示时间段中包含的分钟数。
  • Duration#toSeconds(): 将Duration对象转换为秒数。它返回一个整数值,表示时间段中包含的秒数。
  • Duration#toMillis(): 将Duration对象转换为毫秒数。它返回一个整数值,表示时间段中包含的毫秒数。
  • Duration#toNanos(): 将Duration对象转换为纳秒数。它返回一个整数值,表示时间段中包含的纳秒数。
@Test
public void test7() {Duration duration = Duration.ofDays(1);//定义一个24小时的时间段long days = duration.toDays();//结果:1long hours = duration.toHours();//结果:24long minutes = duration.toMinutes();//结果:1440long seconds = duration.toSeconds();//结果:86400
}

上一篇:深入了解Java Period类,对时间段的精确控制-CSDN博客

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

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

相关文章

【踩坑记录】from natten import NeighborhoodAttention1D

在配置forecast-mae环境的时候。 ./forecast-mae/src/model/layers/agent_embedding.py文件中 导入包的时候from natten import NeighborhoodAttention1D 报错&#xff0c; 解决办法&#xff0c;默认安装的是__version__ "0.14.2"版本的 出现这个问题可能是包损坏…

c++新经典模板与泛型编程:const修饰符的移除与增加

const修饰符的移除 让你来写移除const修饰符&#xff0c;你会怎么样来写&#xff1f; &#x1f602;&#x1f602;trait类模板&#xff0c;如下 #include <iostream>// 泛化版本 template<typename T> struct RemoveConst {using type T; };// 特化版本 template…

kafka入门(四):消费者

消费者 (Consumer ) 消费者 订阅 Kafka 中的主题 (Topic) &#xff0c;并 拉取消息。 消费者群组&#xff08; Consumer Group&#xff09; 每一个消费者都有一个对应的 消费者群组。 一个群组里的消费者订阅的是同一个主题&#xff0c;每个消费者接收主题的一部分分区的消息…

Stable Diffusion 系列教程 - 2 WebUI 参数详解

Stable Diffusion 的整个算法组合为&#xff1a; UNet VAE 文本编码器 UNet&#xff1a;就是我们大模型里的核心。 文本编码器&#xff1a;将我们的prompt进行encoder为算法能理解的内容&#xff08;可以理解为SD外包出去的项目CLIP&#xff09;。 VAE&#xff1a;对UNet生…

Java_LinkedList链表详解

目录 前言 ArrayList的缺陷 链表 链表的概念及结构 链表的种类 1.单向或双向 2.带头或不带头 3.循环或不循环 LinkedList的使用 什么是LinkedList LinkedList的使用 LinkedList的构造 LinkedList的其他常用方法介绍 LinkedList的遍历 ArrayList和LinkedList的…

el-tree数据量过大,造成浏览器卡死、崩溃

el-tree数据量过大&#xff0c;造成浏览器卡死、崩溃 场景&#xff1a;树形结构展示&#xff0c;数据超级多&#xff0c;超过万条&#xff0c;每次打开都会崩溃 我这里采用的是引入新的插件虚拟树&#xff0c;它是参照element-plus 中TreeV2改造vue2.x版本虚拟化树形控件&…

golang开发之个微机器人的二次开发

简要描述&#xff1a; 下载消息中的文件 请求URL&#xff1a; http://域名地址/getMsgFile 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型…

【Unity】Addressable包资源加载失败:CRC Mismatch.

Error while downloading Asset Bundle: CRC Mismatch. 是资源下载校验失败&#xff0c;但是资源和上次打包的资源是一样的。没有排查到原因&#xff0c;在谷歌搜索后看到 大概就是指Unity版本修改后打包&#xff0c;会破坏原来的CRC信息&#xff0c;导致导报出来的资源无法通…

Module build failed : Error : Vue packages version mismatch:

Vue packages version mismatch: - vue2.7.15 (E:\Workspace_ce\erp\erp-web\node_modules\vue\dist\vue.runtime.common.js) - vue-template-compiler2.6.11 (E:\Workspace_ce\erp\erp-web\node_modules\vue-template-compiler\package.json) 【问题解决了&#xff0c;我很不…

Mac电脑投屏AirServer 2024怎么下载安装激活许可期限

对于那些想要将 iPhone、iPad 或其他 iOS 设备上的小屏幕镜像到计算机上的大屏幕的人来说&#xff0c;AirPlay 是一个很好的工具。 基于此&#xff0c;AirServer 非常需要将您的 Mac 或 PC 变成 AirPlay 设备。 但是如何使用计算机上的设置对 iPhone 等 iOS 设备进行屏幕镜像&a…

【AIGC】Midjourney高级进阶版

Midjourney 真是越玩越上头&#xff0c;真是给它的想象力跪了~ 研究了官方API&#xff0c;出一个进阶版教程 命令 旨在介绍Midjourney在Discord频道中的文本框中支持的指令。 1&#xff09;shorten 简化Prompt 该指令可以将输入的Prompt为模型可以理解的语言。模型理解语言…

【C++ 程序设计入门基础】- 第3节-循环结构02

目录 while 语句 案例 while 循环 输入一个整数 n &#xff0c;输出 1~n 的所有整数。 查看运行结果&#xff1a; while 语句结构解析 do while 语句 案例 do while 循环 输入一个整数n&#xff0c;输出1&#xff5e;n的所有整数。 查看运行结果 while、do while的区别 …

我的NPI项目之Android 安全系列 -- Android Strongbox 初识

从Android9(Pie)开始,Google强烈建议支持Strongbox. 具体描述如下: 一直到目前的Android14. 对应的内容也一并贴出来: 说人话就是Android开始通过独立于主SoC的单元进行密钥存储了。 通常&#xff0c;这样的单元就是我们通常称作的Secure Element&#xff08;SE&#xff09;&am…

linux7安装python3.12.1教程

1.下载tar.gz包 地址&#xff1a;Python Release Python 3.12.1 | Python.org 2.上传包到linux服并解压 cd /home/local/ ll tar -zxvf Python-3.12.1.tgz 3.安装编译python所需环境 yum install -y gcc yum install -y zlib* yum -y install zlib-devel bzip2-devel opens…

MATLAB | 官方举办的动图绘制大赛 | 第四周(收官周)赛情回顾

MATHWORKS官方举办的迷你黑客大赛第三期(MATLAB Flipbook Mini Hack)圆满结束&#xff0c;虽然我的水平和很多大佬还有比较大的差距&#xff0c;但所有奖也算是拿满了&#xff1a; 专家评选前三名&#xff0c;以及投票榜前十&#xff1a;~ 每周的阶段性获奖者&#xff1a; 下面…

MongoDB的连接数据库,创建、删除数据库,创建、删除集合命令

本文主要介绍MongoDB的连接数据库&#xff0c;创建、删除数据库&#xff0c;创建、删除集合命令。 目录 MongoDB连接数据库连接到本地 MongoDB 实例连接到远程 MongoDB 实例 MongoDB创建和删除数据库MongoDB创建和删除集合创建集合删除集合 MongoDB连接数据库 连接 MongoDB 数…

2023济南大学acm新生赛题解

通过答题情况的难度系数&#xff1a; 签到&#xff1a;ACI 铜牌题&#xff1a;BG 银牌题&#xff1a;EF 金牌题&#xff1a;DHJKO 赛中暂未有人通过&#xff1a;LMNP A - AB Problem 直接根据公式计算就行。 #include<stdio.h> int main(){int a,b;scanf("%…

2021年第十届数学建模国际赛小美赛A题气道阻力的评估解题全过程文档及程序

2021年第十届数学建模国际赛小美赛 A题 气道阻力的评估 原题再现&#xff1a; 气道阻力的定义是通过肺气道产生单位气流所需的经肺压力的变化。更简单地说&#xff0c;它是嘴和肺泡之间的压力差&#xff0c;除以气流。影响气道阻力的因素是多方面的&#xff0c;我们需要探讨这…

理解基于 Hadoop 生态的大数据技术架构

转眼间&#xff0c;一年又悄然而逝&#xff0c;时光荏苒&#xff0c;岁月如梭。当回首这段光阴&#xff0c;不禁感叹时间的匆匆&#xff0c;仿佛只是一个眨眼的瞬间&#xff0c;一年的旅程已成为过去&#xff0c;而如今又到了画饼的时刻了 &#xff01; 基于 Hadoop 生态的大数…

倪海厦:教你正确煮中药,发挥最大药效

同样的一个汤剂&#xff0c;我开给你&#xff0c;你如果煮的方法不对&#xff0c;吃下去效果就没那么好。 所以&#xff0c;汤&#xff0c;取它的迅捷&#xff0c;速度很快&#xff0c;煮汤的时候还有技巧&#xff0c;你喝汤料的时候&#xff0c;你到底是喝它的气&#xff0c;…