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(date1, date2, DateUnit.MS);
String formatBetween = DateUtil.formatBetween(between);
Assert.assertEquals("31天1小时21分50秒901毫秒", formatBetween);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.isIn(java.util.Date, java.util.Date, java.util.Date)
方法描述
当前日期是否在日期指定范围内<br>
起始日期和结束日期可以互换
支持版本及以上
3.0.8
参数描述:
参数名 | 描述 |
---|---|
Date date |
date 被检查的日期
|
Date beginDate |
beginDate 起始日期
|
Date endDate |
endDate 结束日期
|
返回值:
是否在范围内
参考案例:
String dateStr = "2017-03-01 22:34:23.100";
Date date = DateUtil.parse(dateStr);
String dateStr1 = "2017-02-01 22:34:23.100";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2017-04-01 23:56:14.001";
Date date2 = DateUtil.parse(dateStr2);
boolean isIn = DateUtil.isIn(date,date1,date2);
Assert.assertEquals(Boolean.TRUE, isIn);
dateStr = "2017-05-01 22:34:23.100";
date = DateUtil.parse(dateStr);
isIn = DateUtil.isIn(date,date1,date2);
Assert.assertEquals(Boolean.FALSE, isIn);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.isSameTime(java.util.Date, java.util.Date)
方法描述
是否为相同时间<br>
此方法比较两个日期的时间戳是否相同
支持版本及以上
4.1.13
参数描述:
参数名 | 描述 |
---|---|
Date date1 |
date1 日期1
|
Date date2 |
date2 日期2
|
返回值:
是否为相同时间
参考案例:
String dateStr = "2017-02-01 22:34:23.100";
Date date = DateUtil.parse(dateStr);
String dateStr1 = "2017-02-01 22:34:23.100";
Date date1 = DateUtil.parse(dateStr1);
boolean isSameTime = DateUtil.isSameTime(date,date1);
Assert.assertEquals(Boolean.TRUE, isSameTime);
dateStr1 = "2017-02-01 22:34:23.110";
date1 = DateUtil.parse(dateStr1);
isSameTime = DateUtil.isSameTime(date,date1);
Assert.assertEquals(Boolean.FALSE, isSameTime);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.isSameDay(java.util.Date, java.util.Date)
方法描述
比较两个日期是否为同一天
支持版本及以上
4.1.13
参数描述:
参数名 | 描述 |
---|---|
Date date1 |
date1 日期1
|
Date date2 |
date2 日期2
|
返回值:
是否为同一天
参考案例:
String dateStr1 = "2021-05-19 22:34:23.100";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2021-05-19 23:56:14.001";
Date date2 = DateUtil.parse(dateStr2);
boolean isSameDay = DateUtil.isSameDay(date1,date2);
Assert.assertEquals(Boolean.TRUE, isSameDay);
dateStr2 = "2021-05-20 23:56:14.001";
date2 = DateUtil.parse(dateStr2);
isSameDay = DateUtil.isSameDay(date1,date2);
Assert.assertEquals(Boolean.FALSE, isSameDay);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.isSameMonth(java.util.Date, java.util.Date)
方法描述
比较两个日期是否为同一月
支持版本及以上
5.4.1
参数描述:
参数名 | 描述 |
---|---|
Date date1 |
date1 日期1
|
Date date2 |
date2 日期2
|
返回值:
是否为同一月
参考案例:
String dateStr1 = "2021-05-19 22:34:23.100";
Date date1 = DateUtil.parse(dateStr1);
String dateStr2 = "2021-05-31 23:56:14.001";
Date date2 = DateUtil.parse(dateStr2);
boolean isSameMonth = DateUtil.isSameMonth(date1,date2);
Assert.assertEquals(Boolean.TRUE, isSameMonth);
dateStr2 = "2021-06-20 23:56:14.001";
date2 = DateUtil.parse(dateStr2);
isSameMonth = DateUtil.isSameMonth(date1,date2);
Assert.assertEquals(Boolean.FALSE, isSameMonth);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.spendNt(long)
方法描述
计时,常用于记录某段代码的执行时间,单位:纳秒
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
long preTime |
preTime 之前记录的时间
|
返回值:
时间差,纳秒
参考案例:
//计时,常用于记录某段代码的执行时间,单位:纳秒
int j= 0;
long nanoTimeStart = System.nanoTime();
for (int i = 0; i < 100000; i++) {
j=j+i;
}
long nanoTimeEnd = DateUtil.spendNt(nanoTimeStart);
System.out.println("运行时间为:"+nanoTimeEnd+"纳秒");
System.out.println("j的值为:"+j);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.spendMs(long)
方法描述
计时,常用于记录某段代码的执行时间,单位:毫秒
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
long preTime |
preTime 之前记录的时间
|
返回值:
时间差,毫秒
参考案例:
//计时,常用于记录某段代码的执行时间,单位:毫秒
int j= 0;
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
j=j+i;
}
long end = DateUtil.spendMs(start);
System.out.println("运行时间为:"+end+"毫秒");
System.out.println("j的值为:"+j);
源码解析:
同样的一段for循环代码,使用spendMs和spendNt得到的时间,换算成相同的单位,差距很大
后面在源码篇,会专门来解读
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.toIntSecond(java.util.Date)
方法描述
格式化成yyMMddHHmm后转换为int型
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
Date date |
date 日期
|
返回值:
int
参考案例:
//格式化成yyMMddHHmm后转换为int型
String dateStr1 = "2021-05-19 22:34:23";
Date date = DateUtil.parse(dateStr1);
int toIntSecond = DateUtil.toIntSecond(date);
System.out.println(toIntSecond);
Assert.assertEquals(2105192234, toIntSecond);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.timer()
方法描述
计时器<br>
计算某个过程花费的时间,精确到毫秒
支持版本及以上
参数描述:
参数名 | 描述 |
---|
返回值:
Timer
参考案例:
TimeInterval timer = DateUtil.timer();
// ---------------------------------
// -------这是执行过程
// ---------------------------------
timer.interval();// 花费毫秒数
timer.intervalRestart();// 返回花费时间,并重置开始时间
timer.intervalMinute();// 花费分钟数
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.timer(boolean)
方法描述
计时器<br>
计算某个过程花费的时间,精确到毫秒
支持版本及以上
5.2.3
参数描述:
参数名 | 描述 |
---|---|
boolean isNano |
isNano 是否使用纳秒计数,false则使用毫秒
|
返回值:
Timer
参考案例:
TimeInterval timer = DateUtil.timer(false);
// ---------------------------------
// -------这是执行过程
// ---------------------------------
timer.interval();// 花费毫秒数
timer.intervalRestart();// 返回花费时间,并重置开始时间
timer.intervalMinute();// 花费分钟数
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.createStopWatch()
方法描述
创建秒表{@link StopWatch},用于对代码块的执行时间计数
使用方法如下:
StopWatch stopWatch = DateUtil.createStopWatch(); // 任务1 stopWatch.start("任务一"); Thread.sleep(1000); stopWatch.stop(); // 任务2 stopWatch.start("任务一"); Thread.sleep(2000); stopWatch.stop(); // 打印出耗时 Console.log(stopWatch.prettyPrint());
支持版本及以上
5.2.3
参数描述:
参数名 | 描述 |
---|
返回值:
{@link StopWatch}
参考案例:
StopWatch stopWatch = DateUtil.createStopWatch();
// 任务1
stopWatch.start("任务一");
Thread.sleep(1000);
stopWatch.stop();
// 任务2
stopWatch.start("任务二");
Thread.sleep(2000);
stopWatch.stop();
// 打印出耗时
System.out.println(stopWatch.prettyPrint());
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.createStopWatch(java.lang.String)
方法描述
创建秒表{@link StopWatch},用于对代码块的执行时间计数
使用方法如下:
StopWatch stopWatch = DateUtil.createStopWatch("任务名称"); // 任务1 stopWatch.start("任务一"); Thread.sleep(1000); stopWatch.stop(); // 任务2 stopWatch.start("任务一"); Thread.sleep(2000); stopWatch.stop(); // 打印出耗时 Console.log(stopWatch.prettyPrint());
支持版本及以上
5.2.3
参数描述:
参数名 | 描述 |
---|---|
String id |
id 用于标识秒表的唯一ID
|
返回值:
{@link StopWatch}
参考案例:
StopWatch stopWatch = DateUtil.createStopWatch("任务名称");
// 任务1
stopWatch.start("任务一");
Thread.sleep(1000);
stopWatch.stop();
// 任务2
stopWatch.start("任务二");
Thread.sleep(2000);
stopWatch.stop();
// 打印出耗时
System.out.println(stopWatch.prettyPrint());
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.ageOfNow(java.lang.String)
方法描述
生日转为年龄,计算法定年龄
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
String birthDay |
birthDay 生日,标准日期字符串
|
返回值:
年龄
参考案例:
String birthDay = "2019-05-19";
//生日转为年龄,计算法定年龄(生日,标准日期字符串)
int ageOfNow = DateUtil.ageOfNow(birthDay);
System.out.println(ageOfNow);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.ageOfNow(java.util.Date)
方法描述
生日转为年龄,计算法定年龄
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
Date birthDay |
birthDay 生日
|
返回值:
年龄
参考案例:
String birthDay = "2019-05-19";
//生日转为年龄,计算法定年龄(生日,标准日期字符串)
Date birthDate = DateUtil.parse(birthDay);
int ageOfNow = DateUtil.ageOfNow(birthDate);
System.out.println(ageOfNow);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.isLeapYear(int)
方法描述
是否闰年
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
int year |
year 年
|
返回值:
是否闰年
参考案例:
Assert.assertEquals(true, DateUtil.isLeapYear(2020));
Assert.assertEquals(false, DateUtil.isLeapYear(2021));
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.age(java.util.Date, java.util.Date)
方法描述
计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
Date birthday |
birthday 生日
|
Date dateToCompare |
dateToCompare 需要对比的日期
|
返回值:
年龄
参考案例:
String d1 = "2000-02-29";
String d2 = "2018-02-28";
final int age = DateUtil.age(DateUtil.parseDate(d1), DateUtil.parseDate(d2));
Assert.assertEquals(18, age);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.timeToSecond(java.lang.String)
方法描述
HH:mm:ss 时间格式字符串转为秒数<br>
参考:https://github.com/iceroot
支持版本及以上
3.1.2
参数描述:
参数名 | 描述 |
---|---|
String timeStr |
timeStr 字符串时分秒(HH:mm:ss)格式
|
返回值:
时分秒转换后的秒数
参考案例:
int second = DateUtil.timeToSecond("00:01:40");
Assert.assertEquals(100, second);
second = DateUtil.timeToSecond("00:00:40");
Assert.assertEquals(40, second);
second = DateUtil.timeToSecond("01:00:00");
Assert.assertEquals(3600, second);
second = DateUtil.timeToSecond("00:00:00");
Assert.assertEquals(0, second);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.secondToTime(int)
方法描述
秒数转为时间格式(HH:mm:ss)<br>
参考:https://github.com/iceroot
支持版本及以上
3.1.2
参数描述:
参数名 | 描述 |
---|---|
int seconds |
seconds 需要转换的秒数
|
返回值:
转换后的字符串
参考案例:
String time = DateUtil.secondToTime(3600);
Assert.assertEquals("01:00:00", time);
time = DateUtil.secondToTime(3800);
Assert.assertEquals("01:03:20", time);
time = DateUtil.secondToTime(0);
Assert.assertEquals("00:00:00", time);
time = DateUtil.secondToTime(30);
Assert.assertEquals("00:00:30", time);
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.range(java.util.Date, java.util.Date, cn.hutool.core.date.DateField)
方法描述
创建日期范围生成器
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
Date start |
start 起始日期时间
|
Date end |
end 结束日期时间
|
DateField unit |
unit 步进单位
|
返回值:
{@link DateRange}
参考案例:
DateTime start = DateUtil.parse("2017-01-01");
DateTime end = DateUtil.parse("2017-01-03");
// 测试包含开始和结束情况下步进为1的情况
DateRange range = DateUtil.range(start, end, DateField.DAY_OF_YEAR);
Assert.assertEquals(range.next(), DateUtil.parse("2017-01-01"));
Assert.assertEquals(range.next(), DateUtil.parse("2017-01-02"));
Assert.assertEquals(range.next(), DateUtil.parse("2017-01-03"));
try {
range.next();
Assert.fail("已超过边界,下一个元素不应该存在!");
} catch (NoSuchElementException ignored) {
}
// 测试多步进的情况
range = new DateRange(start, end, DateField.DAY_OF_YEAR, 2);
Assert.assertEquals(range.next(), DateUtil.parse("2017-01-01"));
Assert.assertEquals(range.next(), DateUtil.parse("2017-01-03"));
// 测试不包含开始结束时间的情况
range = new DateRange(start, end, DateField.DAY_OF_YEAR, 1, false, false);
Assert.assertEquals(range.next(), DateUtil.parse("2017-01-02"));
try {
range.next();
Assert.fail("不包含结束时间情况下,下一个元素不应该存在!");
} catch (NoSuchElementException ignored) {
}
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.rangeToList(java.util.Date, java.util.Date, cn.hutool.core.date.DateField)
方法描述
创建日期范围生成器
支持版本及以上
参数描述:
参数名 | 描述 |
---|---|
Date start |
start 起始日期时间
|
Date end |
end 结束日期时间
|
DateField unit |
unit 步进单位
|
返回值:
{@link DateRange}
参考案例:
DateTime start = DateUtil.parse("2017-01-01");
DateTime end = DateUtil.parse("2017-01-31");
List<DateTime> rangeToList = DateUtil.rangeToList(start, end, DateField.DAY_OF_YEAR);
Assert.assertEquals(rangeToList.get(0), DateUtil.parse("2017-01-01"));
Assert.assertEquals(rangeToList.get(1), DateUtil.parse("2017-01-02"));
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.getZodiac(int, int)
方法描述
通过生日计算星座
支持版本及以上
4.4.3
参数描述:
参数名 | 描述 |
---|---|
int month |
month 月,从0开始计数
|
int day |
day 天
|
返回值:
星座名
参考案例:
//month从0开始计数
Assert.assertEquals("射手座", DateUtil.getZodiac(11,21));
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.getChineseZodiac(int)
方法描述
计算生肖,只计算1900年后出生的人
支持版本及以上
4.4.3
参数描述:
参数名 | 描述 |
---|---|
int year |
year 农历年
|
返回值:
生肖名
参考案例:
//month从0开始计数
Assert.assertEquals("马", DateUtil.getChineseZodiac(1990));
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.compare(java.util.Date, java.util.Date)
方法描述
{@code null}安全的日期比较,{@code null}对象排在末尾
支持版本及以上
4.6.2
参数描述:
参数名 | 描述 |
---|---|
Date date1 |
date1 日期1
|
Date date2 |
date2 日期2
|
返回值:
比较结果,如果date1 < date2,返回数小于0,date1==date2返回0,date1 > date2 大于0
参考案例:
Date date1 = DateUtil.parse("2021-04-13 23:59:59.999");
Date date2 = DateUtil.parse("2021-04-13 23:59:10");
Assert.assertEquals(1, DateUtil.compare(date1, date2));
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.compare(java.util.Date, java.util.Date, java.lang.String)
方法描述
{@code null}安全的日期比较,并只比较指定格式; {@code null}对象排在末尾, 并指定日期格式;
支持版本及以上
5.6.4
参数描述:
参数名 | 描述 |
---|---|
Date date1 |
date1 日期1
|
Date date2 |
date2 日期2
|
String format |
format 日期格式,常用格式见: {@link DatePattern}; 允许为空; date1 date2; eg: yyyy-MM-dd
|
返回值:
比较结果,如果date1 < date2,返回数小于0,date1==date2返回0,date1 > date2 大于0
参考案例:
Date date1 = DateUtil.parse("2021-04-13 23:59:59.999");
Date date2 = DateUtil.parse("2021-04-13 23:59:10");
Assert.assertEquals(1, DateUtil.compare(date1, date2, DatePattern.NORM_DATETIME_PATTERN));
Assert.assertEquals(0, DateUtil.compare(date1, date2, DatePattern.NORM_DATE_PATTERN));
Assert.assertEquals(0, DateUtil.compare(date1, date2, DatePattern.NORM_DATETIME_MINUTE_PATTERN));
Date date11 = DateUtil.parse("2021-04-13 23:59:59.999");
Date date22 = DateUtil.parse("2021-04-11 23:10:10");
Assert.assertEquals(0, DateUtil.compare(date11, date22, DatePattern.NORM_MONTH_PATTERN));
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.nanosToMillis(long)
方法描述
纳秒转毫秒
支持版本及以上
4.6.6
参数描述:
参数名 | 描述 |
---|---|
long duration |
duration 时长
|
返回值:
时长毫秒
参考案例:
//纳秒转毫秒
Assert.assertEquals(1000,DateUtil.nanosToMillis(1000*1000*1000));
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.date.DateUtil.nanosToSeconds(long)
方法描述
纳秒转秒,保留小数
支持版本及以上
4.6.6
参数描述:
参数名 | 描述 |
---|---|
long duration |
duration 时长
|
返回值:
秒
参考案例:
DateUtil.nanosToSeconds(1000*1000*1000)
源码解析:
链接:待补充
方法明细
7hutool实战:FileUtil 文件工具类(100多个文件常用操作方法)
7hutool实战:FileUtil 文件工具类(100多个文件常用操作方法)
7hutool实战FileUtil 文件工具类(100多个文件常用操作方法)
1hutool实战:DateUtil(时间工具类)-当前时间