7hutool实战:DateUtil(时间工具类)-日期计算

技术活,该赏
关注+一键三连(点赞,评论,收藏)再看,养成好习惯

hutool实战(带你掌握里面的各种工具)目录

万字博文教你搞懂java源码的日期和时间相关用法


用途:日期计算

使用场景

包含日期的各种计算方式

项目引用

此博文的依据: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)
判断两个日期相差的时长,只保留绝对值
cn.hutool.core.date.DateUtil.between
(java.util.Date, java.util.Date, cn.hutool.core.date.DateUnit, boolean)
判断两个日期相差的时长
cn.hutool.core.date.DateUtil.betweenMs
(java.util.Date, java.util.Date)
判断两个日期相差的毫秒数
cn.hutool.core.date.DateUtil.betweenDay
(java.util.Date, java.util.Date, boolean)
判断两个日期相差的天数
 有时候我们计算相差天数的时候需要忽略时分秒。 
比如:2016-02-01 23:59:59和2016-02-02 00:00:00相差一秒
如果isReset为{@code false}相差天数为0。
如果isReset为{@code true}相差天数将被计算为1
cn.hutool.core.date.DateUtil.betweenWeek
(java.util.Date, java.util.Date, boolean)
计算指定指定时间区间内的周数
cn.hutool.core.date.DateUtil.betweenMonth
(java.util.Date, java.util.Date, boolean)
计算两个日期相差月数
在非重置情况下,如果起始日期的天大于结束日期的天,月数要少算1(不足1个月)
cn.hutool.core.date.DateUtil.betweenYear
(java.util.Date, java.util.Date, boolean)
计算两个日期相差年数
在非重置情况下,如果起始日期的月大于结束日期的月,年数要少算1(不足1年)
cn.hutool.core.date.DateUtil.formatBetween
(java.util.Date, java.util.Date, cn.hutool.core.date.BetweenFormatter.Level)
格式化日期间隔输出
cn.hutool.core.date.DateUtil.formatBetween
(java.util.Date, java.util.Date)
格式化日期间隔输出,精确到毫秒
cn.hutool.core.date.DateUtil.formatBetween
(long, cn.hutool.core.date.BetweenFormatter.Level)
格式化日期间隔输出
cn.hutool.core.date.DateUtil.formatBetween
(long)
格式化日期间隔输出,精确到毫秒
cn.hutool.core.date.DateUtil.isIn
(java.util.Date, java.util.Date, java.util.Date)
当前日期是否在日期指定范围内
起始日期和结束日期可以互换
cn.hutool.core.date.DateUtil.isSameTime
(java.util.Date, java.util.Date)
是否为相同时间
此方法比较两个日期的时间戳是否相同
cn.hutool.core.date.DateUtil.isSameDay
(java.util.Date, java.util.Date)
比较两个日期是否为同一天
cn.hutool.core.date.DateUtil.isSameMonth
(java.util.Date, java.util.Date)
比较两个日期是否为同一月
cn.hutool.core.date.DateUtil.spendNt
(long)
计时,常用于记录某段代码的执行时间,单位:纳秒
cn.hutool.core.date.DateUtil.spendMs
(long)
计时,常用于记录某段代码的执行时间,单位:毫秒
cn.hutool.core.date.DateUtil.toIntSecond
(java.util.Date)
格式化成yyMMddHHmm后转换为int型
cn.hutool.core.date.DateUtil.timer()
计时器
计算某个过程花费的时间,精确到毫秒
cn.hutool.core.date.DateUtil.timer
(boolean)
计时器
计算某个过程花费的时间,精确到毫秒
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());

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());

cn.hutool.core.date.DateUtil.ageOfNow
(java.lang.String)
生日转为年龄,计算法定年龄
cn.hutool.core.date.DateUtil.ageOfNow
(java.util.Date)
生日转为年龄,计算法定年龄
cn.hutool.core.date.DateUtil.isLeapYear
(int)
是否闰年
cn.hutool.core.date.DateUtil.age
(java.util.Date, java.util.Date)
计算相对于dateToCompare的年龄,长用于计算指定生日在某年的年龄
cn.hutool.core.date.DateUtil.timeToSecond
(java.lang.String)
HH:mm:ss 时间格式字符串转为秒数
参考:https://github.com/iceroot
cn.hutool.core.date.DateUtil.secondToTime
(int)
秒数转为时间格式(HH:mm:ss)
参考:https://github.com/iceroot
cn.hutool.core.date.DateUtil.range
(java.util.Date, java.util.Date, cn.hutool.core.date.DateField)
创建日期范围生成器
cn.hutool.core.date.DateUtil.rangeToList
(java.util.Date, java.util.Date, cn.hutool.core.date.DateField)
创建日期范围生成器
cn.hutool.core.date.DateUtil.getZodiac
(int, int)
通过生日计算星座
cn.hutool.core.date.DateUtil.getChineseZodiac
(int)
计算生肖,只计算1900年后出生的人
cn.hutool.core.date.DateUtil.compare
(java.util.Date, java.util.Date)
{@code null}安全的日期比较,{@code null}对象排在末尾
cn.hutool.core.date.DateUtil.compare
(java.util.Date, java.util.Date, java.lang.String)
{@code null}安全的日期比较,并只比较指定格式;
{@code null}对象排在末尾, 并指定日期格式;
cn.hutool.core.date.DateUtil.nanosToMillis
(long)
纳秒转毫秒
cn.hutool.core.date.DateUtil.nanosToSeconds
(long)
纳秒转秒,保留小数
cn.hutool.core.date.DateUtil.toInstant
(java.util.Date)
Date对象转换为{@link Instant}对象
cn.hutool.core.date.DateUtil.toInstant
(java.time.temporal.TemporalAccessor)
Date对象转换为{@link Instant}对象
cn.hutool.core.date.DateUtil.toLocalDateTime
(java.time.Instant)
{@link Instant} 转换为 {@link LocalDateTime},使用系统默认时区
cn.hutool.core.date.DateUtil.toLocalDateTime
(java.util.Date)
{@link Date} 转换为 {@link LocalDateTime},使用系统默认时区
cn.hutool.core.date.DateUtil.lengthOfYear
(int)
获得指定年份的总天数
cn.hutool.core.date.DateUtil.lengthOfMonth
(int, boolean)
获得指定月份的总天数

方法明细

方法名称: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);
			System.out.println("datr("+datr+") 和\"1970-01-01\" 相关天数:"+betweenDay);
			Assert.assertEquals(Math.abs(LocalDate.parse(datr).toEpochDay()), betweenDay);
		}

返回的是相差天数的绝对值

image-20211029094658329

源码解析:

链接:待补充

方法明细

方法名称: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)

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.DateUtil.toInstant(java.util.Date)

方法描述

Date对象转换为{@link Instant}对象

支持版本及以上

5.0.2

参数描述:

参数名描述
Date date
date Date对象

返回值:

{@link Instant}对象

参考案例:

		LocalDateTime localDateTime = LocalDateTime.parse("2017-05-06T08:30:00", DateTimeFormatter.ISO_DATE_TIME);
		Instant instant = DateUtil.toInstant(localDateTime);
		Assert.assertEquals("2017-05-06T00:30:00Z", instant.toString());

		LocalDate localDate = localDateTime.toLocalDate();
		instant = DateUtil.toInstant(localDate);
		Assert.assertNotNull(instant);

		LocalTime localTime = localDateTime.toLocalTime();
		instant = DateUtil.toInstant(localTime);
		Assert.assertNotNull(instant);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.DateUtil.toInstant(java.time.temporal.TemporalAccessor)

方法描述

Date对象转换为{@link Instant}对象

支持版本及以上

5.0.2

参数描述:

参数名描述
TemporalAccessor temporalAccessor
temporalAccessor Date对象

返回值:

{@link Instant}对象

参考案例:

		LocalDateTime localDateTime = LocalDateTime.parse("2017-05-06T08:30:00", DateTimeFormatter.ISO_DATE_TIME);
		Instant instant = DateUtil.toInstant(localDateTime);
		Assert.assertEquals("2017-05-06T00:30:00Z", instant.toString());

		LocalDate localDate = localDateTime.toLocalDate();
		instant = DateUtil.toInstant(localDate);
		Assert.assertNotNull(instant);

		LocalTime localTime = localDateTime.toLocalTime();
		instant = DateUtil.toInstant(localTime);
		Assert.assertNotNull(instant);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.DateUtil.toLocalDateTime(java.time.Instant)

方法描述

{@link Instant} 转换为 {@link LocalDateTime},使用系统默认时区

支持版本及以上

5.0.5

参数描述:

参数名描述
Instant instant
instant {@link Instant}

返回值:

{@link LocalDateTime}

参考案例:

		Date src = new Date();
		
		LocalDateTime ldt = Convert.toLocalDateTime(src);
		Assert.assertEquals(ldt, DateUtil.toLocalDateTime(src));
		
		Timestamp ts = Timestamp.from(src.toInstant());
		ldt = Convert.toLocalDateTime(ts);
		Assert.assertEquals(ldt, DateUtil.toLocalDateTime(src));
		
		String str = "2020-12-12 12:12:12.0";
		ldt = Convert.toLocalDateTime(str);
		Assert.assertEquals(ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S")), str);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.DateUtil.toLocalDateTime(java.util.Date)

方法描述

{@link Date} 转换为 {@link LocalDateTime},使用系统默认时区

支持版本及以上

5.0.5

参数描述:

参数名描述
Date date
date {@link Date}

返回值:

{@link LocalDateTime}

参考案例:

		Date src = new Date();
		
		LocalDateTime ldt = Convert.toLocalDateTime(src);
		Assert.assertEquals(ldt, DateUtil.toLocalDateTime(src));
		
		Timestamp ts = Timestamp.from(src.toInstant());
		ldt = Convert.toLocalDateTime(ts);
		Assert.assertEquals(ldt, DateUtil.toLocalDateTime(src));
		
		String str = "2020-12-12 12:12:12.0";
		ldt = Convert.toLocalDateTime(str);
		Assert.assertEquals(ldt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S")), str);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.DateUtil.lengthOfYear(int)

方法描述

获得指定年份的总天数

支持版本及以上

5.3.6

参数描述:

参数名描述
int year
year 年份

返回值:

参考案例:

		int dayOfYear = DateUtil.dayOfYear(DateUtil.parse("2020-01-01"));
		Assert.assertEquals(1, dayOfYear);
		int lengthOfYear = DateUtil.lengthOfYear(2020);
		Assert.assertEquals(366, lengthOfYear);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.DateUtil.lengthOfMonth(int, boolean)

方法描述

获得指定月份的总天数

支持版本及以上

5.4.2

参数描述:

参数名描述
int month
month 月份
boolean isLeapYear
isLeapYear 是否闰年

返回值:

参考案例:

		int lengthOfMonth = DateUtil.lengthOfMonth(2,true);
		Assert.assertEquals(29, lengthOfMonth);
		lengthOfMonth = DateUtil.lengthOfMonth(2,false);
		Assert.assertEquals(28, lengthOfMonth);

源码解析:

链接:待补充
  • 26
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论
Hutool是一个Java开源工具类库,其中包含了丰富的常用工具类,提供了一套规范的工具类,使得开发更加简化和高效。其中也包括了时间工具类Hutool时间工具类主要是针对日期时间相关的操作提供了一些便捷的方法。你可以使用HutoolDateUtil工具类来进行日期时间的处理。 使用HutoolDateUtil工具类,你可以进行以下操作: 1. 获取当前日期时间; 2. 格式化日期时间; 3. 解析字符串为日期时间对象; 4. 比较两个日期时间大小; 5. 进行日期时间的加减运算; 6. 设置日期时间的指定部分(如年、月、日、小时、分钟等); 7. 获取日期时间的指定部分(如年、月、日、小时、分钟等)。 通过引入Hutool的依赖,你可以在你的项目中使用Hutool时间工具类。在pom.xml文件中,添加以下依赖: ```xml <dependencies> <dependency> *** </dependency> </dependencies> ``` 然后,你可以使用HutoolDateUtil工具类来进行日期时间的处理。具体的使用方法可以参考Hutool的官方文档和API参考。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [HuTool从入门到精通1-日期和文件工具类入门](https://blog.csdn.net/weixin_44480609/article/details/125330109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小虚竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值