Java8学习笔记:计算两个时间的间隔及相隔天数、秒数等
环境
Java11
IDEA:2020.1
前言
如果大家用过Java7的时间,应该都知道,要计算startTime
和endTime
时间间隔是要写很多代码的;
Java8开始对时间类进行过重构优化,并且提供了很多工具类;
代码
ChronoUnit类
现在假设有如下代码:
// 常量
private static final int ONE = 1;
public static void main(String[] args) {// 当前时间减一个月,也就是2020-11-03 00:00:00OffsetDateTime startTime = OffsetDateTime.now().with(LocalTime.MIN).plusMonths(-ONE);// 当前时间:2020-12-03 23:59:59.999OffsetDateTime endTime = OffsetDateTime.now().with(LocalTime.MAX);System.out.println(ChronoUnit.DAYS.between(startTime, endTime));System.out.println(ChronoUnit.HOURS.between(startTime, endTime));System.out.println(ChronoUnit.MINUTES.between(startTime, endTime));System.out.println(ChronoUnit.SECONDS.between(startTime, endTime));System.out.println(ChronoUnit.HALF_DAYS.between(startTime, endTime));
}
运行结果如下:
30 // 天
743 // 时 30 * 24 = 720 + 23 = 743
44639 // 分
2678399 // 秒
61 // 这个是按半天来算的,30天 = 60 半天 23小时 算一个半天 所以60+1=61
重点注意:
比如:开始时间:2020-08-12
结束时间:2020-12-07
其实已经超过3个月,将近四个月。
但是ChronoUnit.MINUTES.between(startTime, endTime)
得到的结果是3
;
假设业务上,要求,开始时间和结束时间的跨度最多为3个月;
那么,很明显ChronoUnit.MINUTES.between(startTime, endTime)
这个方法只精确到月
,没有精确到天
。
解决思路:
startTime.plusMonth(3)
即:将开始时间加上三个月,然后再去和结束时间进行比较;
这样就可以精确到天
了。
Duration类
该方法也提供了类似功能:
public static void main(String[] args) {// 当前时间减一个月,也就是2020-11-03 00:00:00OffsetDateTime startTime = OffsetDateTime.now().with(LocalTime.MIN).plusMonths(-ONE);// 当前时间:2020-12-03 23:59:59.999OffsetDateTime endTime = OffsetDateTime.now().with(LocalTime.MAX);System.out.println(Duration.between(startTime, endTime).toDays());System.out.println(Duration.between(startTime, endTime).toHours());System.out.println(Duration.between(startTime, endTime).toMinutes());// 这个我执行会报找不到符号:toSeconds()// System.out.println(Duration.between(startTime, endTime).toSeconds());// 该类不支持计算半天halfDay
}
结果:
30
743
44639
Period类
该提供的between()方法:
public static Period between(LocalDate startDateInclusive, LocalDate endDateExclusive) {return startDateInclusive.until(endDateExclusive);
}
也就是说它只支持LocalDate
类的计算。
public static void main(String[] args) {LocalDate today = LocalDate.now();System.out.println("Today : " + today);LocalDate birthDate = LocalDate.of(1993, Month.OCTOBER, 19);System.out.println("BirthDate : " + birthDate);Period p = Period.between(birthDate, today);System.out.printf("年龄 : %d 年 %d 月 %d 日", p.getYears(), p.getMonths(), p.getDays());
}
从上面可以看出,即使调用了between(...)
方法,也是需要根据返回 对象Period
,来获取相差的时间间隔。
总结
优先使用ChronoUnit
类,支持的非常全;
参考地址:
Java8中计算日期时间差
Java8学习笔记:计算两个时间的间隔及相隔天数、秒数等相关推荐
- JS 计算两个时间的间隔
js 计算两个时间之间间隔的天数 var start = new Date('2019-12-10'); //开始的时间 var end = new Date('2020-01-09'); //结束的 ...
- python的datetime举例_Python datetime库计算两个时间点之间的分钟(秒、天)数
计算两个时间点之间的分钟数 import datetime def minNums(startTime, endTime): '''计算两个时间点之间的分钟数''' # 处理格式,加上秒位 start ...
- 计算两个时间的间隔时间是多少
/*** 计算两个时间间隔* @param startTime 开始时间* @param endTime 结束时间* @param type 类型(1:相隔小时 2:)* @return*/publi ...
- JS 用时间戳计算两个时间之间间隔
getTime()方法 方法定义: getTime() 方法可返回距 1970 年 1 月 1 日之间的毫秒数. 通常我们计算时间差都是通过获取两个时间数据,然后分别使用 getTime() 方法返回 ...
- 计算两个时间的间隔时长
//方法一(直接处理时间) var time1='08:00'; var time2='16:00'; var hours;var time=time1+":"+time2; va ...
- 计算两个时间的间隔天数,除去双休日
工作中,需要核算员工的工作饱和率,就需要计算出员工实际出勤小时数,和应出勤的小时数.关于应出勤自然要和工作日有关系,所以一周有效时间是5天,所以要除去所有的周六日.如下图: 以下方法便是除去周六日的方 ...
- LocalDateTime计算两个时间的间隔
LocalDateTime date3 = LocalDateTime.now();LocalDateTime date4 = LocalDateTime.of(2022, 10, 8, 10, 30 ...
- 使用Java的Calendar类计算两段时间之间的工作日的天/小时/分钟/秒数
计算两段时间之间的工作日的天/小时/分钟/秒数 我们能经常遇到一些需求,让获取工作日的时间(当然,调休也上班也是工作日哈!),之前自己给这搞得头大,所以整理总结,把该工具类记录下来,希望大家能用到的时 ...
- c语言计算时钟的夹角不用if,C语言学习笔记——计算时钟的夹角
C语言学习笔记--计算时钟的夹角 题目内容: 钟面上的时针和分针之间的夹角总是在 0 -180之间 ( 包括 0 和180 ) .举例来说,在十二点的时候两针之间的夹角为 0 ,而在六点的时候夹角为1 ...
最新文章
- poj2718 Smallest Difference
- go 指针变量和普通变量的转化_7.8 C++指针变量的引用
- Spring注解开发-初始化/销毁方法注解
- 计算任何一天是星期几的几种算法
- 为什么0.1无法被二进制小数精确表示?
- Samba配置文件解析
- 关于某些系统统计查询等业务进行大数据量的测试
- 信安教程第二版-第26章大数据安全需求分析与安全保护工程
- linux open函数解释,linux之open函数解析
- 详解ifconfig命令
- 【IMX6ULL笔记】--内核底层驱动初步探究
- ie11安装程序无法继续 因为你的计算机,ie11无法安装解决方法详解
- 微博开放平台注册应用
- 大树体验云受邀参加CMO价值营销峰会 助力品牌新增长
- Win10下载和安装FPGA软件:Quartus Prime( Standard 版本18.1)
- 【程序员的爱情】彼岸花开谁又种下了执念
- “空天地海”一体化的海上应急通信网络技术综述
- 【路径规划】基于头脑风暴优化算法求解带时间窗和同时取送货的车辆路径问题附matlab代码
- python获取决策树的叶节点与深度
- win7桌面便笺:启动时提示windows7部分便笺的元数据已被损坏