7hutool实战:DateUtil(时间工具类)-日期计算
Posted 小虚竹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7hutool实战:DateUtil(时间工具类)-日期计算相关的知识,希望对你有一定的参考价值。
技术活,该赏
关注+一键三连(点赞,评论,收藏)再看,养成好习惯
用途:日期计算
使用场景
包含日期的各种计算方式
项目引用
此博文的依据:hutool-5.6.5版本源码
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.6.5</version>
</dependency>
方法摘要
方法明细
方法名称:cn.hutool.core.date.DateUtil.between(java.util.Date, java.util.Date, cn.hutool.core.date.DateUnit)
方法描述
判断两个日期相差的时长,只保留绝对值
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
Date beginDate |
beginDate 起始日期
|
Date endDate |
endDate 结束日期
|
DateUnit unit |
unit 相差的单位:相差 天{@link DateUnit#DAY}、小时{@link DateUnit#HOUR} 等
|
返回值:
日期差
参考案例:
String dateStr1 = "2017-03-01 22:34:23";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2017-04-01 23:56:14";
Date date2 = DateUtil.parse(dateStr2);
// 相差月
long betweenMonth = DateUtil.betweenMonth(date1, date2, false);
Assert.assertEquals(1, betweenMonth);// 相差一个月
// 反向
betweenMonth = DateUtil.betweenMonth(date2, date1, false);
Assert.assertEquals(1, betweenMonth);// 相差一个月
// 相差天
long betweenDay = DateUtil.between(date1, date2, DateUnit.DAY);
Assert.assertEquals(31, betweenDay);// 相差一个月,31天
// 反向
betweenDay = DateUtil.between(date2, date1, DateUnit.DAY);
Assert.assertEquals(31, betweenDay);// 相差一个月,31天
// 相差小时
long betweenHour = DateUtil.between(date1, date2, DateUnit.HOUR);
Assert.assertEquals(745, betweenHour);
// 反向
betweenHour = DateUtil.between(date2, date1, DateUnit.HOUR);
Assert.assertEquals(745, betweenHour);
// 相差分
long betweenMinute = DateUtil.between(date1, date2, DateUnit.MINUTE);
Assert.assertEquals(44721, betweenMinute);
// 反向
betweenMinute = DateUtil.between(date2, date1, DateUnit.MINUTE);
Assert.assertEquals(44721, betweenMinute);
// 相差秒
long betweenSecond = DateUtil.between(date1, date2, DateUnit.SECOND);
Assert.assertEquals(2683311, betweenSecond);
// 反向
betweenSecond = DateUtil.between(date2, date1, DateUnit.SECOND);
Assert.assertEquals(2683311, betweenSecond);
// 相差秒
long betweenMS = DateUtil.between(date1, date2, DateUnit.MS);
Assert.assertEquals(2683311000L, betweenMS);
// 反向
betweenMS = DateUtil.between(date2, date1, DateUnit.MS);
Assert.assertEquals(2683311000L, betweenMS);
long between = DateUtil.between(DateUtil.parse("2019-05-06 02:15:00"), DateUtil.parse("2019-05-06 02:20:00"), DateUnit.HOUR);
Assert.assertEquals(0, between);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.between(java.util.Date, java.util.Date, cn.hutool.core.date.DateUnit, boolean)
方法描述
判断两个日期相差的时长
支持版本及以上
3.3.1
参数描述:
参数名 | 描述 |
---|---|
Date beginDate |
beginDate 起始日期
|
Date endDate |
endDate 结束日期
|
DateUnit unit |
unit 相差的单位:相差 天{@link DateUnit#DAY}、小时{@link DateUnit#HOUR} 等
|
boolean isAbs |
isAbs 日期间隔是否只保留绝对值正数
|
返回值:
日期差
参考案例:
long between = DateUtil.between(DateUtil.parse("2021-05-18 22:15:00"), DateUtil.parse("2021-05-18 21:15:00"), DateUnit.HOUR,true);
Assert.assertEquals(1, between);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.betweenMs(java.util.Date, java.util.Date)
方法描述
判断两个日期相差的毫秒数
支持版本及以上
3.0.1
参数描述:
参数名 | 描述 |
---|---|
Date beginDate |
beginDate 起始日期
|
Date endDate |
endDate 结束日期
|
返回值:
日期差
参考案例:
//判断两个日期相差的毫秒数
long between = DateUtil.betweenMs(DateUtil.parse("2021-05-18 22:15:00"), DateUtil.parse("2021-05-18 21:15:00"));
Assert.assertEquals(60*60*1000, between);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.betweenDay(java.util.Date, java.util.Date, boolean)
方法描述
判断两个日期相差的天数<br>
有时候我们计算相差天数的时候需要忽略时分秒。 比如:2016-02-01 23:59:59和2016-02-02 00:00:00相差一秒 如果isReset为{@code false}相差天数为0。 如果isReset为{@code true}相差天数将被计算为1
支持版本及以上
3.0.1
参数描述:
参数名 | 描述 |
---|---|
Date beginDate |
beginDate 起始日期
|
Date endDate |
endDate 结束日期
|
boolean isReset |
isReset 是否重置时间为起始时间
|
返回值:
日期差
参考案例:
for (int i = 0; i < 1000; i++) {
String datr = RandomUtil.randomInt(1900, 2099) + "-01-20";
long betweenDay = DateUtil.betweenDay(
DateUtil.parseDate("1970-01-01"),
DateUtil.parseDate(datr), false);
Assert.assertEquals(Math.abs(LocalDate.parse(datr).toEpochDay()), betweenDay);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.betweenWeek(java.util.Date, java.util.Date, boolean)
方法描述
计算指定指定时间区间内的周数
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
Date beginDate |
beginDate 开始时间
|
Date endDate |
endDate 结束时间
|
boolean isReset |
isReset 是否重置时间为起始时间
|
返回值:
周数
参考案例:
final DateTime start = DateUtil.parse("2019-03-05");
final DateTime end = DateUtil.parse("2019-10-05");
final long weekCount = DateUtil.betweenWeek(start, end, true);
Assert.assertEquals(30L, weekCount);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.betweenMonth(java.util.Date, java.util.Date, boolean)
方法描述
计算两个日期相差月数<br>
在非重置情况下,如果起始日期的天大于结束日期的天,月数要少算1(不足1个月)
支持版本及以上
3.0.8
参数描述:
参数名 | 描述 |
---|---|
Date beginDate |
beginDate 起始日期
|
Date endDate |
endDate 结束日期
|
boolean isReset |
isReset 是否重置时间为起始时间(重置天时分秒)
|
返回值:
相差月数
参考案例:
String dateStr1 = "2017-03-01 22:34:23";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2017-04-01 23:56:14";
Date date2 = DateUtil.parse(dateStr2);
// 相差月
long betweenMonth = DateUtil.betweenMonth(date1, date2, false);
Assert.assertEquals(1, betweenMonth);// 相差一个月
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.betweenYear(java.util.Date, java.util.Date, boolean)
方法描述
计算两个日期相差年数<br>
在非重置情况下,如果起始日期的月大于结束日期的月,年数要少算1(不足1年)
支持版本及以上
3.0.8
参数描述:
参数名 | 描述 |
---|---|
Date beginDate |
beginDate 起始日期
|
Date endDate |
endDate 结束日期
|
boolean isReset |
isReset 是否重置时间为起始时间(重置月天时分秒)
|
返回值:
相差年数
参考案例:
long betweenYear = DateUtil.betweenYear(DateUtil.parse("2021-05-18 22:15:00"), DateUtil.parse("2020-05-18 21:15:00"),true);
Assert.assertEquals(1, betweenYear);
betweenYear = DateUtil.betweenYear(DateUtil.parse("2020-05-18 22:15:00"), DateUtil.parse("2021-05-18 22:15:00"),true);
Assert.assertEquals(1, betweenYear);
betweenYear = DateUtil.betweenYear(DateUtil.parse("2020-05-18 22:15:00"), DateUtil.parse("2021-05-18 21:15:00"),false);
Assert.assertEquals(0, betweenYear);
betweenYear = DateUtil.betweenYear(DateUtil.parse("2020-05-18 22:15:00"), DateUtil.parse("2021-05-19 22:15:00"),false);
Assert.assertEquals(1, betweenYear);
betweenYear = DateUtil.betweenYear(DateUtil.parse("2020-05-18 22:15:00"), DateUtil.parse("2021-04-18 22:15:00"),false);
Assert.assertEquals(0, betweenYear);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.formatBetween(java.util.Date, java.util.Date, cn.hutool.core.date.BetweenFormatter.Level)
方法描述
格式化日期间隔输出
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
Date beginDate |
beginDate 起始日期
|
Date endDate |
endDate 结束日期
|
BetweenFormatter.Level level |
level 级别,按照天、小时、分、秒、毫秒分为5个等级
|
返回值:
XX天XX小时XX分XX秒
参考案例:
String dateStr1 = "2017-03-01 22:34:23";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2017-04-01 23:56:14";
Date date2 = DateUtil.parse(dateStr2);
long between = DateUtil.between(date1, date2, DateUnit.MS);
String formatBetween = DateUtil.formatBetween(between, Level.MINUTE);
Assert.assertEquals("31天1小时21分", formatBetween);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.formatBetween(java.util.Date, java.util.Date)
方法描述
格式化日期间隔输出,精确到毫秒
支持版本及以上
3.0.1
参数描述:
参数名 | 描述 |
---|---|
Date beginDate |
beginDate 起始日期
|
Date endDate |
endDate 结束日期
|
返回值:
XX天XX小时XX分XX秒
参考案例:
String dateStr1 = "2017-03-01 22:34:23.100";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2017-04-01 23:56:14.001";
Date date2 = DateUtil.parse(dateStr2);
//格式化日期间隔输出,精确到毫秒
String formatBetween = DateUtil.formatBetween(date1,date2);
Assert.assertEquals("31天1小时21分50秒901毫秒", formatBetween);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.formatBetween(long, cn.hutool.core.date.BetweenFormatter.Level)
方法描述
格式化日期间隔输出
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
long betweenMs |
betweenMs 日期间隔
|
BetweenFormatter.Level level |
level 级别,按照天、小时、分、秒、毫秒分为5个等级
|
返回值:
XX天XX小时XX分XX秒XX毫秒
参考案例:
String dateStr1 = "2017-03-01 22:34:23";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2017-04-01 23:56:14";
Date date2 = DateUtil.parse(dateStr2);
long between = DateUtil.between(date1, date2, DateUnit.MS);
String formatBetween = DateUtil.formatBetween(between, Level.MINUTE);
Assert.assertEquals("31天1小时21分", formatBetween);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.formatBetween(long)
方法描述
格式化日期间隔输出,精确到毫秒
支持版本及以上
3.0.1
参数描述:
参数名 | 描述 |
---|---|
long betweenMs |
betweenMs 日期间隔
|
返回值:
XX天XX小时XX分XX秒XX毫秒
参考案例:
String dateStr1 = "2017-03-01 22:34:23.100";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2017-04-01 23:56:14.001";
Date date2 = DateUtil.parse(dateStr2);
//格式化日期间隔输出,精确到毫秒
long between = DateUtil.between(d以上是关于7hutool实战:DateUtil(时间工具类)-日期计算的主要内容,如果未能解决你的问题,请参考以下文章
7hutool实战:FileUtil 文件工具类(100多个文件常用操作方法)
7hutool实战:FileUtil 文件工具类(100多个文件常用操作方法)
7hutool实战FileUtil 文件工具类(100多个文件常用操作方法)
1hutool实战:DateUtil(时间工具类)-当前时间