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

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

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


用途:对JDK8+中的LocalDateTime工具类封装

使用场景

对JDK8+中的LocalDateTime工具类封装

项目引用

此博文的依据:hutool-5.6.5版本源码

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.6.5</version>
</dependency>

方法摘要

方法

描述

​cn.hutool.core.date.LocalDateTimeUtil.now()​

当前时间,默认时区

​cn.hutool.core.date.LocalDateTimeUtil.of(java.time.Instant)​

{@link Instant}转{@link LocalDateTime},使用默认时区

​cn.hutool.core.date.LocalDateTimeUtil.ofUTC(java.time.Instant)​

{@link Instant}转{@link LocalDateTime},使用UTC时区

​cn.hutool.core.date.LocalDateTimeUtil.of(java.time.ZonedDateTime)​

{@link ZonedDateTime}转{@link LocalDateTime}

​cn.hutool.core.date.LocalDateTimeUtil.of(java.time.Instant, java.time.ZoneId)​

{@link Instant}转{@link LocalDateTime}

​cn.hutool.core.date.LocalDateTimeUtil.of(java.time.Instant, java.util.TimeZone)​

{@link Instant}转{@link LocalDateTime}

​cn.hutool.core.date.LocalDateTimeUtil.of(long)​

毫秒转{@link LocalDateTime},使用默认时区

注意:此方法使用默认时区,如果非UTC,会产生时间偏移


​cn.hutool.core.date.LocalDateTimeUtil.ofUTC(long)​

毫秒转{@link LocalDateTime},使用UTC时区

​cn.hutool.core.date.LocalDateTimeUtil.of(long, java.time.ZoneId)​

毫秒转{@link LocalDateTime},根据时区不同,结果会产生时间偏移

​cn.hutool.core.date.LocalDateTimeUtil.of(long, java.util.TimeZone)​

毫秒转{@link LocalDateTime},结果会产生时间偏移

​cn.hutool.core.date.LocalDateTimeUtil.of(java.util.Date)​

{@link Date}转{@link LocalDateTime},使用默认时区

​cn.hutool.core.date.LocalDateTimeUtil.of(java.time.temporal.TemporalAccessor)​

{@link TemporalAccessor}转{@link LocalDateTime},使用默认时区

​cn.hutool.core.date.LocalDateTimeUtil.ofDate(java.time.temporal.TemporalAccessor)​

{@link TemporalAccessor}转{@link LocalDate},使用默认时区

​cn.hutool.core.date.LocalDateTimeUtil.parse(java.lang.CharSequence)​

解析日期时间字符串为{@link LocalDateTime},仅支持yyyy-MM-dd’T’HH:mm:ss格式,例如:2007-12-03T10:15:30

​cn.hutool.core.date.LocalDateTimeUtil.parse(java.lang.CharSequence, java.time.format.DateTimeFormatter)​

解析日期时间字符串为{@link LocalDateTime},格式支持日期时间、日期、时间

​cn.hutool.core.date.LocalDateTimeUtil.parse(java.lang.CharSequence, java.lang.String)​

解析日期时间字符串为{@link LocalDateTime}

​cn.hutool.core.date.LocalDateTimeUtil.parseDate(java.lang.CharSequence)​

解析日期时间字符串为{@link LocalDate},仅支持yyyy-MM-dd’T’HH:mm:ss格式,例如:2007-12-03T10:15:30

​cn.hutool.core.date.LocalDateTimeUtil.parseDate(java.lang.CharSequence, java.time.format.DateTimeFormatter)​

解析日期时间字符串为{@link LocalDate},格式支持日期

​cn.hutool.core.date.LocalDateTimeUtil.parseDate(java.lang.CharSequence, java.lang.String)​

解析日期字符串为{@link LocalDate}

​cn.hutool.core.date.LocalDateTimeUtil.formatNormal(java.time.LocalDateTime)​

格式化日期时间为yyyy-MM-dd HH:mm:ss格式

​cn.hutool.core.date.LocalDateTimeUtil.format(java.time.LocalDateTime, java.time.format.DateTimeFormatter)​

格式化日期时间为指定格式

​cn.hutool.core.date.LocalDateTimeUtil.format(java.time.LocalDateTime, java.lang.String)​

格式化日期时间为指定格式

​cn.hutool.core.date.LocalDateTimeUtil.formatNormal(java.time.LocalDate)​

格式化日期时间为yyyy-MM-dd格式

​cn.hutool.core.date.LocalDateTimeUtil.format(java.time.LocalDate, java.time.format.DateTimeFormatter)​

格式化日期时间为指定格式

​cn.hutool.core.date.LocalDateTimeUtil.format(java.time.LocalDate, java.lang.String)​

格式化日期时间为指定格式

​cn.hutool.core.date.LocalDateTimeUtil.offset(java.time.LocalDateTime, long, java.time.temporal.TemporalUnit)​

日期偏移,根据field不同加不同值(偏移会修改传入的对象)

​cn.hutool.core.date.LocalDateTimeUtil.between(java.time.LocalDateTime, java.time.LocalDateTime)​

获取两个日期的差,如果结束时间早于开始时间,获取结果为负。

返回结果为{@link Duration}对象,通过调用toXXX方法返回相差单位


​cn.hutool.core.date.LocalDateTimeUtil.between(java.time.LocalDateTime, java.time.LocalDateTime, java.time.temporal.ChronoUnit)​

获取两个日期的差,如果结束时间早于开始时间,获取结果为负。

返回结果为时间差的long值


​cn.hutool.core.date.LocalDateTimeUtil.betweenPeriod(java.time.LocalDate, java.time.LocalDate)​

获取两个日期的表象时间差,如果结束时间早于开始时间,获取结果为负。

比如2011年2月1日,和2021年8月11日,日相差了10天,月相差6月


​cn.hutool.core.date.LocalDateTimeUtil.beginOfDay(java.time.LocalDateTime)​

修改为一天的开始时间,例如:2020-02-02 00:00:00,000

​cn.hutool.core.date.LocalDateTimeUtil.endOfDay(java.time.LocalDateTime)​

修改为一天的结束时间,例如:2020-02-02 23:59:59,999

​cn.hutool.core.date.LocalDateTimeUtil.toEpochMilli(java.time.temporal.TemporalAccessor)​

{@link TemporalAccessor}转换为 时间戳(从1970-01-01T00:00:00Z开始的毫秒数)

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.now()

方法描述

当前时间,默认时区

支持版本及以上

参数描述:

参数名

描述

返回值:

{@link LocalDateTime}

参考案例:

Assert.assertNotNull(LocalDateTimeUtil.now()

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.of(java.time.Instant)

方法描述

{@link Instant}转{@link LocalDateTime},使用默认时区

支持版本及以上

参数描述:

参数名

描述

Instant instant

instant {@link Instant}

返回值:

{@link LocalDateTime}

参考案例:

String dateStr = "2020-01-23T12:23:56";
final DateTime dt = DateUtil.parse(dateStr);

LocalDateTime of = LocalDateTimeUtil.of(dt);
Assert.assertNotNull(of);
Assert.assertEquals(dateStr, of.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.ofUTC(java.time.Instant)

方法描述

{@link Instant}转{@link LocalDateTime},使用UTC时区

支持版本及以上

参数描述:

参数名

描述

Instant instant

instant {@link Instant}

返回值:

{@link LocalDateTime}

参考案例:

String dateStr = "2020-01-23T12:23:56";
final DateTime dt = DateUtil.parse(dateStr);

of = LocalDateTimeUtil.ofUTC(dt.getTime());
Assert.assertEquals(dateStr, of.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.of(java.time.ZonedDateTime)

方法描述

{@link ZonedDateTime}转{@link LocalDateTime}

支持版本及以上

参数描述:

参数名

描述

ZonedDateTime zonedDateTime

zonedDateTime {@link ZonedDateTime}

返回值:

{@link LocalDateTime}

参考案例:

String dateStr = "2021-05-21T11:23:56";
final DateTime dt = DateUtil.parse(dateStr);
//使用默认时区
LocalDateTime localDateTime = LocalDateTimeUtil.of(dt);
System.out.println(localDateTime);
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
System.out.println(zonedDateTime);
zonedDateTime = localDateTime.atZone( ZoneId.of("Asia/Shanghai"));
System.out.println(zonedDateTime);
LocalDateTime of = LocalDateTimeUtil.of(zonedDateTime);

Assert.assertNotNull(of);
Assert.assertEquals("2021-05-21T11:23:56", of.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.of(java.time.Instant, java.time.ZoneId)

方法描述

{@link Instant}转{@link LocalDateTime}

支持版本及以上

参数描述:

参数名

描述

Instant instant

instant {@link Instant}

ZoneId zoneId

zoneId 时区

返回值:

{@link LocalDateTime}

参考案例:

String dateStr = "2021-05-21T11:23:56";
final DateTime dt = DateUtil.parse(dateStr);
LocalDateTime of = LocalDateTimeUtil.of(dt.getTime(), ZoneId.of("UTC"));
Assert.assertNotNull(of);
Assert.assertEquals(dateStr, of.toString());

of = LocalDateTimeUtil.of(dt.getTime(), ZoneId.of("Asia/Shanghai"));
Assert.assertNotNull(of);
Assert.assertEquals("2021-05-21T19:23:56", of.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.of(java.time.Instant, java.util.TimeZone)

方法描述

{@link Instant}转{@link LocalDateTime}

支持版本及以上

参数描述:

参数名

描述

Instant instant

instant {@link Instant}

TimeZone timeZone

timeZone 时区

返回值:

{@link LocalDateTime}

参考案例:

String dateStr = "2021-05-21T11:23:56";
// 通过转换获取的Instant为UTC时间
Instant instant1 = DateUtil.parse(dateStr).toInstant();
LocalDateTime localDateTime = LocalDateTimeUtil.of(instant1,ZoneId.of("Asia/Shanghai"));
Assert.assertEquals("2021-05-21T19:23:56", localDateTime.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.of(long)

方法描述

毫秒转{@link LocalDateTime},使用默认时区

注意:此方法使用默认时区,如果非UTC,会产生时间偏移

### 支持版本及以上

参数描述:

参数名

描述

long epochMilli

epochMilli 从1970-01-01T00:00:00Z开始计数的毫秒数

返回值:

{@link LocalDateTime}

参考案例:

String dateStr = "2021-05-22 10:23:56";
Long time = DateUtil.parse(dateStr).getTime();
// 使用默认时区
LocalDateTime localDateTime = LocalDateTimeUtil.of(time);
Assert.assertEquals("2021-05-22T10:23:56", localDateTime.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.ofUTC(long)

方法描述

毫秒转{@link LocalDateTime},使用UTC时区

支持版本及以上

参数描述:

参数名

描述

long epochMilli

epochMilli 从1970-01-01T00:00:00Z开始计数的毫秒数

返回值:

{@link LocalDateTime}

参考案例:

String dateStr = "2021-05-22T10:23:56";
Long time = DateUtil.parse(dateStr).getTime();
// 使用UTC时区
LocalDateTime localDateTime = LocalDateTimeUtil.ofUTC(time);
Assert.assertEquals("2021-05-22T10:23:56", localDateTime.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.of(long, java.time.ZoneId)

方法描述

毫秒转{@link LocalDateTime},根据时区不同,结果会产生时间偏移

支持版本及以上

参数描述:

参数名

描述

long epochMilli

epochMilli 从1970-01-01T00:00:00Z开始计数的毫秒数

ZoneId zoneId

zoneId 时区

返回值:

{@link LocalDateTime}

参考案例:

String dateStr = "2021-05-22T10:23:56";
Long time = DateUtil.parse(dateStr).getTime();

LocalDateTime localDateTime = LocalDateTimeUtil.of(time,ZoneId.of("Asia/Shanghai"));
Assert.assertEquals("2021-05-22T18:23:56", localDateTime.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.of(long, java.util.TimeZone)

方法描述

毫秒转{@link LocalDateTime},结果会产生时间偏移

支持版本及以上

参数描述:

参数名

描述

long epochMilli

epochMilli 从1970-01-01T00:00:00Z开始计数的毫秒数

TimeZone timeZone

timeZone 时区

返回值:

{@link LocalDateTime}

参考案例:

String dateStr = "2021-05-22T10:23:56";
Long time = DateUtil.parse(dateStr).getTime();

LocalDateTime localDateTime = LocalDateTimeUtil.of(time, TimeZone.getTimeZone(ZoneId.of("Asia/Shanghai")));
Assert.assertEquals("2021-05-22T18:23:56", localDateTime.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.of(java.util.Date)

方法描述

{@link Date}转{@link LocalDateTime},使用默认时区

支持版本及以上

参数描述:

参数名

描述

Date date

date Date对象

返回值:

{@link LocalDateTime}

参考案例:

String dateStr = "2021-05-22 10:23:56";
DateTime date = DateUtil.parse(dateStr);
//使用默认时区
LocalDateTime localDateTime = LocalDateTimeUtil.of(date);
Assert.assertEquals("2021-05-22T10:23:56", localDateTime.toString());

源码解析:

链接:待补充

方法明细

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

方法描述

{@link TemporalAccessor}转{@link LocalDateTime},使用默认时区

支持版本及以上

参数描述:

参数名

描述

TemporalAccessor temporalAccessor

temporalAccessor {@link TemporalAccessor}

返回值:

{@link LocalDateTime}

参考案例:

String dateStr = "2021-05-22T10:23:56";
//使用默认时区
TemporalAccessor temporalAccessor = DateTimeFormatter.ISO_DATE_TIME.parse(dateStr);
LocalDateTime localDateTime = LocalDateTimeUtil.of(temporalAccessor);
Assert.assertEquals("2021-05-22T10:23:56", localDateTime.toString());

源码解析:

链接:待补充

方法明细

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

方法描述

{@link TemporalAccessor}转{@link LocalDate},使用默认时区

支持版本及以上

5.3.10

参数描述:

参数名

描述

TemporalAccessor temporalAccessor

temporalAccessor {@link TemporalAccessor}

返回值:

{@link LocalDate}

参考案例:

String dateStr = "2021-05-22T10:23:56";
//使用默认时区
TemporalAccessor temporalAccessor = DateTimeFormatter.ISO_DATE_TIME.parse(dateStr);
LocalDate localDate = LocalDateTimeUtil.ofDate(temporalAccessor);
Assert.assertEquals("2021-05-22", localDate.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.parse(java.lang.CharSequence)

方法描述

解析日期时间字符串为{@link LocalDateTime},仅支持yyyy-MM-dd’T’HH:mm:ss格式,例如:2007-12-03T10:15:30

支持版本及以上

参数描述:

参数名

描述

CharSequence text

text 日期时间字符串

返回值:

{@link LocalDateTime}

参考案例:

final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
Assert.assertEquals("2020-01-23T12:23:56", localDateTime.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.parse(java.lang.CharSequence, java.time.format.DateTimeFormatter)

方法描述

解析日期时间字符串为{@link LocalDateTime},格式支持日期时间、日期、时间

支持版本及以上

参数描述:

参数名

描述

CharSequence text

text 日期时间字符串

DateTimeFormatter formatter

formatter 日期格式化器,预定义的格式见:{@link DateTimeFormatter}

返回值:

{@link LocalDateTime}

参考案例:

final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56", DateTimeFormatter.ISO_DATE_TIME);
Assert.assertEquals("2020-01-23T12:23:56", localDateTime.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.parse(java.lang.CharSequence, java.lang.String)

方法描述

解析日期时间字符串为{@link LocalDateTime}

支持版本及以上

参数描述:

参数名

描述

CharSequence text

text 日期时间字符串

String format

format 日期格式,类似于yyyy-MM-dd HH:mm:ss,SSS

返回值:

{@link LocalDateTime}

参考案例:

final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23", DatePattern.NORM_DATE_PATTERN);
Assert.assertEquals("2020-01-23T00:00", localDateTime.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.parseDate(java.lang.CharSequence)

方法描述

解析日期时间字符串为{@link LocalDate},仅支持yyyy-MM-dd’T’HH:mm:ss格式,例如:2007-12-03T10:15:30

支持版本及以上

5.3.10

参数描述:

参数名

描述

CharSequence text

text 日期时间字符串

返回值:

{@link LocalDate}

参考案例:

LocalDate localDate = LocalDateTimeUtil.parseDate("2020-01-23");
Assert.assertEquals("2020-01-23", localDate.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.parseDate(java.lang.CharSequence, java.time.format.DateTimeFormatter)

方法描述

解析日期时间字符串为{@link LocalDate},格式支持日期

支持版本及以上

5.3.10

参数描述:

参数名

描述

CharSequence text

text 日期时间字符串

DateTimeFormatter formatter

formatter 日期格式化器,预定义的格式见:{@link DateTimeFormatter}

返回值:

{@link LocalDate}

参考案例:

LocalDate localDate = LocalDateTimeUtil.parseDate("2020-01-23");


localDate = LocalDateTimeUtil.parseDate("2020-01-23T12:23:56", DateTimeFormatter.ISO_DATE_TIME);
Assert.assertEquals("2020-01-23", localDate.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.parseDate(java.lang.CharSequence, java.lang.String)

方法描述

解析日期字符串为{@link LocalDate}

支持版本及以上

参数描述:

参数名

描述

CharSequence text

text 日期字符串

String format

format 日期格式,类似于yyyy-MM-dd

返回值:

{@link LocalDateTime}

参考案例:

//第一个参数和第二个参数格式保持一致
LocalDate localDate = LocalDateTimeUtil.parseDate("2020-01-23 12:23:56","yyyy-MM-dd hh:mm:ss");
Assert.assertEquals("2020-01-23", localDate.toString());
localDate = LocalDateTimeUtil.parseDate("2020/01/23 12:23:56","yyyy/MM/dd hh:mm:ss");
Assert.assertEquals("2020-01-23", localDate.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.formatNormal(java.time.LocalDateTime)

方法描述

格式化日期时间为yyyy-MM-dd HH:mm:ss格式

支持版本及以上

5.3.11

参数描述:

参数名

描述

LocalDateTime time

time {@link LocalDateTime}

返回值:

格式化后的字符串

参考案例:

final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
String format = LocalDateTimeUtil.formatNormal(localDateTime);
Assert.assertEquals("2020-01-23 12:23:56", format);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.format(java.time.LocalDateTime, java.time.format.DateTimeFormatter)

方法描述

格式化日期时间为指定格式

支持版本及以上

参数描述:

参数名

描述

LocalDateTime time

time {@link LocalDateTime}

DateTimeFormatter formatter

formatter 日期格式化器,预定义的格式见:{@link DateTimeFormatter}

返回值:

格式化后的字符串

参考案例:

LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
String format = LocalDateTimeUtil.format(localDateTime, DateTimeFormatter.ISO_DATE_TIME);
Assert.assertEquals("2020-01-23T12:23:56", format);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.format(java.time.LocalDateTime, java.lang.String)

方法描述

格式化日期时间为指定格式

支持版本及以上

参数描述:

参数名

描述

LocalDateTime time

time {@link LocalDateTime}

String format

format 日期格式,类似于yyyy-MM-dd HH:mm:ss,SSS

返回值:

格式化后的字符串

参考案例:

final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
String format = LocalDateTimeUtil.format(localDateTime, DatePattern.NORM_DATETIME_PATTERN);
Assert.assertEquals("2020-01-23 12:23:56", format);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.formatNormal(java.time.LocalDate)

方法描述

格式化日期时间为yyyy-MM-dd格式

支持版本及以上

5.3.11

参数描述:

参数名

描述

LocalDate date

date {@link LocalDate}

返回值:

格式化后的字符串

参考案例:

final LocalDate date = LocalDate.parse("2020-01-23");
String format = LocalDateTimeUtil.format(date, DatePattern.NORM_DATE_PATTERN);
Assert.assertEquals("2020-01-23", format);

format = LocalDateTimeUtil.formatNormal(date);
Assert.assertEquals("2020-01-23", format);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.format(java.time.LocalDate, java.time.format.DateTimeFormatter)

方法描述

格式化日期时间为指定格式

支持版本及以上

5.3.10

参数描述:

参数名

描述

LocalDate date

date {@link LocalDate}

DateTimeFormatter formatter

formatter 日期格式化器,预定义的格式见:{@link DateTimeFormatter}

返回值:

格式化后的字符串

参考案例:

final LocalDate date = LocalDate.parse("2021-05-22");
String format = LocalDateTimeUtil.format(date, DateTimeFormatter.ISO_DATE);
Assert.assertEquals("2021-05-22", format);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.format(java.time.LocalDate, java.lang.String)

方法描述

格式化日期时间为指定格式

支持版本及以上

5.3.10

参数描述:

参数名

描述

LocalDate date

date {@link LocalDate}

String format

format 日期格式,类似于yyyy-MM-dd

返回值:

格式化后的字符串

参考案例:

final LocalDate date = LocalDate.parse("2020-01-23");
String format = LocalDateTimeUtil.format(date, DatePattern.NORM_DATE_PATTERN);
Assert.assertEquals("2020-01-23", format);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.offset(java.time.LocalDateTime, long, java.time.temporal.TemporalUnit)

方法描述

日期偏移,根据field不同加不同值(偏移会修改传入的对象)

支持版本及以上

参数描述:

参数名

描述

LocalDateTime time

time {@link LocalDateTime}

long number

number 偏移量,正数为向后偏移,负数为向前偏移

TemporalUnit field

field 偏移单位,见{@link ChronoUnit},不能为null

返回值:

偏移后的日期时间

参考案例:

final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
LocalDateTime offset = LocalDateTimeUtil.offset(localDateTime, 1, ChronoUnit.DAYS);
// 非同一对象
Assert.assertNotSame(localDateTime, offset);

Assert.assertEquals("2020-01-24T12:23:56", offset.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.between(java.time.LocalDateTime, java.time.LocalDateTime)

方法描述

获取两个日期的差,如果结束时间早于开始时间,获取结果为负。

返回结果为{@link Duration}对象,通过调用toXXX方法返回相差单位 ### 支持版本及以上

参数描述:

参数名

描述

LocalDateTime startTimeInclude

startTimeInclude 开始时间(包含)

LocalDateTime endTimeExclude

endTimeExclude 结束时间(不包含)

返回值:

时间差 {@link Duration}对象

参考案例:

final Duration between = LocalDateTimeUtil.between(
LocalDateTimeUtil.parse("2019-02-02T00:00:00"),
LocalDateTimeUtil.parse("2020-02-02T00:00:00"));
Assert.assertEquals(365, between.toDays());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.between(java.time.LocalDateTime, java.time.LocalDateTime, java.time.temporal.ChronoUnit)

方法描述

获取两个日期的差,如果结束时间早于开始时间,获取结果为负。

返回结果为时间差的long值 ### 支持版本及以上 5.4.5 ### 参数描述: 参数名 | 描述 ---|--- LocalDateTime startTimeInclude |

startTimeInclude 开始时间(包括) LocalDateTime endTimeExclude | endTimeExclude 结束时间(不包括) ChronoUnit unit | unit 时间差单位

返回值:

时间差

参考案例:

final long betweenWeek = DateUtil.betweenWeek(
DateUtil.parse("2020-11-21"),
DateUtil.parse("2020-11-23"), false);

final long betweenWeek2 = LocalDateTimeUtil.between(
LocalDateTimeUtil.parse("2020-11-21", "yyy-MM-dd"),
LocalDateTimeUtil.parse("2020-11-23", "yyy-MM-dd"),
ChronoUnit.WEEKS);
Assert.assertEquals(betweenWeek, betweenWeek2);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.betweenPeriod(java.time.LocalDate, java.time.LocalDate)

方法描述

获取两个日期的表象时间差,如果结束时间早于开始时间,获取结果为负。

比如2011年2月1日,和2021年8月11日,日相差了10天,月相差6月 ### 支持版本及以上 5.4.5 ### 参数描述: 参数名 | 描述 ---|--- LocalDate startTimeInclude |

startTimeInclude 开始时间(包括) LocalDate endTimeExclude | endTimeExclude 结束时间(不包括)

返回值:

时间差

参考案例:

final LocalDate localDate1= LocalDate.parse("2021-05-22");
final LocalDate localDate2= LocalDate.parse("2021-06-23");

Period period = LocalDateTimeUtil.betweenPeriod(localDate1,localDate2);
Assert.assertEquals(1, period.getMonths());
Assert.assertEquals(1, period.getDays());

period = LocalDateTimeUtil.betweenPeriod(localDate2,localDate1);
Assert.assertEquals(-1, period.getMonths());
Assert.assertEquals(-1, period.getDays());
final LocalDate localDate3= LocalDate.parse("2021-06-22");
period = LocalDateTimeUtil.betweenPeriod(localDate1,localDate3);
Assert.assertEquals(1, period.getMonths());
Assert.assertEquals(0, period.getDays());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.beginOfDay(java.time.LocalDateTime)

方法描述

修改为一天的开始时间,例如:2020-02-02 00:00:00,000

支持版本及以上

参数描述:

参数名

描述

LocalDateTime time

time 日期时间

返回值:

一天的开始时间

参考案例:

final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
final LocalDateTime beginOfDay = LocalDateTimeUtil.beginOfDay(localDateTime);
Assert.assertEquals("2020-01-23T00:00", beginOfDay.toString());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.date.LocalDateTimeUtil.endOfDay(java.time.LocalDateTime)

方法描述

修改为一天的结束时间,例如:2020-02-02 23:59:59,999

支持版本及以上

参数描述:

参数名

描述

LocalDateTime time

time 日期时间

返回值:

一天的结束时间

参考案例:

final LocalDateTime localDateTime = LocalDateTimeUtil.parse("2020-01-23T12:23:56");
final LocalDateTime endOfDay = LocalDateTimeUtil.endOfDay(localDateTime);
Assert.assertEquals("2020-01-23T23:59:59.999999999", endOfDay.toString());

源码解析:

链接:待补充

方法明细

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

方法描述

{@link TemporalAccessor}转换为 时间戳(从1970-01-01T00:00:00Z开始的毫秒数)

支持版本及以上

5.4.1

参数描述:

参数名

描述

TemporalAccessor temporalAccessor

temporalAccessor Date对象

返回值:

{@link Instant}对象

参考案例:

String dateStr = "2021-05-22";
//TemporalAccessor 的实现类包含Instant LocalDateTime ZonedDateTime OffsetDateTime LocalDate LocalTime OffsetTime
LocalDate localDate = LocalDate.parse(dateStr);
//Date对象
long time = LocalDateTimeUtil.toEpochMilli(localDate);
Assert.assertEquals(DateUtil.parse(dateStr).getTime(), time);

源码解析:

链接:待补充