JAVA中计算两个日期时间的差值竟然也有这么多门道

日期时间的处理,是软件开发中极其常见的场景,JAVA中与日期、时间相关的一些类与API方法也很多,这里结合平时的编码实践全面的整理了下,希望可以帮助大家厘清其中的门道,更加游刃有余的面对此方面的处理~

JAVA中与日期时间相关的类

java.util包中

类名 具体描述
Date Date对象算是JAVA中历史比较悠久的用于处理日期、时间相关的类了,但是随着版本的迭代演进,其中的众多方法都已经被弃用,所以Date更多的时候仅被用来做一个数据类型使用,用于记录对应的日期与时间信息
Calender 为了弥补Date对象在日期时间处理方法上的一些缺陷,JAVA提供了Calender抽象类来辅助实现Date相关的一些日历日期时间的处理与计算。
TimeZone Timezone类提供了一些有用的方法用于获取时区的相关信息

java.time包中

JAVA8之后新增了java.time包,提供了一些与日期时间有关的新实现类:

具体每个类对应的含义说明梳理如下表:

类名 含义说明
LocalDate 获取当前的日期信息,仅有简单的日期信息,不包含具体时间、不包含时区信息。
LocalTime 获取当前的时间信息,仅有简单的时间信息,不含具体的日期、时区信息。
LocalDateTime 可以看做是LocalDate和LocalTime的组合体,其同时含有日期信息与时间信息,但是依旧不包含任何时区信息。
OffsetDateTime 在LocalDateTime基础上增加了时区偏移量信息
ZonedDateTime 在OffsetDateTime基础上,增加了时区信息
ZoneOffset 时区偏移量信息, 比如+8:00或者-5:00等
ZoneId 具体的时区信息,比如Asia/Shanghai或者America/Chicago

时间间隔计算

Period与Duration类

JAVA8开始新增的java.time包中有提供Duration和Period两个类,用于处理日期时间间隔相关的场景,两个类的区别点如下:

描述
Duration 时间间隔,用于秒级的时间间隔计算
Period 日期间隔,用于天级别的时间间隔计算,比如年月日维度的

Duration与Period具体使用的时候还需要有一定的甄别,因为部分的方法很容易使用中被混淆,下面分别说明下。

  • Duration

Duration的最小计数单位为纳秒,其内部使用seconds和nanos两个字段来进行组合计数表示duration总长度。

Duration的常用API方法梳理如下:

方法 描述
between 计算两个时间的间隔,默认是秒
ofXxx 以of开头的一系列方法,表示基于给定的值创建一个Duration实例。比如ofHours(2L),则表示创建一个Duration对象,其值为间隔2小时
plusXxx 以plus开头的一系列方法,用于在现有的Duration值基础上增加对应的时间长度,比如plusDays()表示追加多少天,或者plusMinutes()表示追加多少分钟
minusXxx 以minus开头的一系列方法,用于在现有的Duration值基础上扣减对应的时间长度,与plusXxx相反
toXxxx 以to开头的一系列方法,用于将当前Duration对象转换为对应单位的long型数据,比如toDays()表示将当前的时间间隔的值,转换为相差多少天,而toHours()则标识转换为相差多少小时。
getSeconds 获取当前Duration对象对应的秒数, 与toXxx方法类似,只是因为Duration使用秒作为计数单位,所以直接通过get方法即可获取到值,而toDays()是需要通过将秒数转为天数换算之后返回结果,所以提供的方法命名上会有些许差异。
getNano 获取当前Duration对应的纳秒数“零头”。 注意这里与toNanos()不一样,toNanos是Duration值的纳秒单位总长度,getNano()只是获取不满1s剩余的那个零头,以纳秒表示。
isNegative 检查Duration实例是否小于0,若小于0返回true, 若大于等于0返回false
isZero 用于判断当前的时间间隔值是否为0 ,比如比较两个时间是否一致,可以通过between计算出Durati
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值