日期间隔(日期间隔excel)

java8中引入了两个与日期相关的新类

  • Period - 计算两个“日期”间隔的类
  • Duration - 计算两个“时间”间隔的类

Period 类与 Duration 类都是一段持续时间的概念,如果需要对比时间,它们就需要一个固定的时间值,所以就需要 LocalDate 类与 Instant 、LocalTime、LocalDateTime类来配合它们使用:

  • Period 对应使用 LocalDate ,它们的作用范围域都是日期(年/月/日)
  • Duration 对应使用 Instant、LocalTime、LocalDateTime日期间隔,它们的作用范围域都是时间(天/时/分/秒/毫秒/纳秒)

Duration 表示一个时间段,Duration 包含两部分:seconds 表示秒,nanos 表示纳秒,它们的组合表达了时间长度。

因为 Duration 表示时间段,所以 Duration 类中不包含 now() 静态方法。注意,Duration 不包含毫秒这个属性。

Duration只能处理两个时间类,例如LocalTime, LocalDateTime, ZonedDateTime; 如果传入的是LocalDate,将会抛出异常

Duration默认输出格式为PTnHnMnS,如PT8H6M12.345S
以PT前缀开头,H:小时 M:分钟 S:秒
当Duration为0时,默认为:PT0S

方法说明static Duration between(Temporal startInclusive, Temporal endExclusive)计算两个时间的间隔,默认是秒boolean isNegative()检查Duration实例是否小于0,若小于0返回true, 若大于等于0返回falselong toDays()将时间转换为以天为单位的long值long toHours()将时间转换为以时为单位的long值long toMinutes()将时间转换为以分钟为单位的long值long日期间隔 getSeconds()将时间转换为以秒为单位的long值long toMillis()将时间转换为以毫秒为单位的long值long toNanos()将时间转换为以纳秒为单位的long值

使用示例:

 

执行结果:

 
 

方法一:

通过Duration计算两个LocalTime相差的时间

 

方法二:

ChronoUnit也可以计算两个单元之间的差值。
我们使用ChronoUnit类的between() 方法来执行相同的操作

 

方法三:

通过LocalTime类的toSecondOfDay()方法,返回时间对应的秒数,然后计算出两个时间相差的间隔

 

计算两个时间戳的间隔
项目中经常会有时间戳的值,下面的示例一起看一下如何比较时间戳。

 
 

Period 在概念上和 Duration 类似,区别在于 Period 是以年月日来衡量一个时间段。Duration 用于计算两个时间间隔,Period 用于计算两个日期间隔,所以 between() 方法只能接收 LocalDate 类型的参数。

说明:
Period可以用于计算两个“日期”之间的间隔,但是得到的是年月日,如两个日期相差1年2月3天,但是没办法知道1年2月3天具体是多少天,下面有讲通过调用ChronoUnit.between()方法计算两个单元相差的天数、月数、年数…

Period默认输出格式为PnYnMnD,如P2021Y12M3D
以P前缀开头,Y:年 M:月份 D:天
当Period为0时,默认为:P0D

方法说明static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive)计算两个日期之间的间隔boolean isNegative()检查此时间段的三个单位中是否有一个为负数。这将检查年,月或天的单位是否小于零。如果此期间的任何单位为负,则为trueint getYears()获取年int getMonths()获取月int getDays()获取日
 
 

注意

  • getYears()、getMonths()、getDays()只能输出Period中的年月日。像如下的示例,想知道两个日期相差多少天需要用ChronoUnit.between()方法。
 
 
 

方法一:
ChronoUnit也可以计算两个单元之间的天数、月数或年数。
我们使用ChronoUnit类的between() 方法来执行相同的操作:

 

方法二:

调用LocalDate类的toEpochDay方法,返回距离 日期间隔1970年1月1日的long值
此方法只能计算两个LocalDate日期间的天数,不能计算月份、年数

 






在这里插入图片描述

转载请说明出处 内容投诉内容投诉
九幽软件 » 日期间隔(日期间隔excel)