diff --git a/hutool-core/src/main/java/cn/hutool/v7/core/date/DateBetween.java b/hutool-core/src/main/java/cn/hutool/v7/core/date/DateBetween.java index 967fcf340d..645e2bad23 100644 --- a/hutool-core/src/main/java/cn/hutool/v7/core/date/DateBetween.java +++ b/hutool-core/src/main/java/cn/hutool/v7/core/date/DateBetween.java @@ -35,11 +35,11 @@ public class DateBetween implements Serializable { /** * 开始日期 */ - private final Date begin; + private final long begin; /** * 结束日期 */ - private final Date end; + private final long end; /** * 创建
@@ -94,11 +94,11 @@ public class DateBetween implements Serializable { if (isAbs && begin.after(end)) { // 间隔只为正数的情况下,如果开始日期晚于结束日期,置换之 - this.begin = end; - this.end = begin; + this.begin = end.getTime(); + this.end = begin.getTime(); } else { - this.begin = begin; - this.end = end; + this.begin = begin.getTime(); + this.end = end.getTime(); } } @@ -110,7 +110,7 @@ public class DateBetween implements Serializable { * @return 时长差 */ public long between(final DateUnit unit) { - final long diff = end.getTime() - begin.getTime(); + final long diff = end - begin; return diff / unit.getMillis(); } @@ -183,8 +183,8 @@ public class DateBetween implements Serializable { * * @return 获取开始时间 */ - public Date getBegin() { - return begin; + public Date getBeginDate() { + return DateUtil.date(begin); } /** @@ -192,8 +192,8 @@ public class DateBetween implements Serializable { * * @return 结束日期 */ - public Date getEnd() { - return end; + public Date getEndDate() { + return DateUtil.date(end); } /** diff --git a/hutool-core/src/test/java/cn/hutool/v7/core/date/DateBetweenTest.java b/hutool-core/src/test/java/cn/hutool/v7/core/date/DateBetweenTest.java index 4dbb6f1bfc..056c95b951 100644 --- a/hutool-core/src/test/java/cn/hutool/v7/core/date/DateBetweenTest.java +++ b/hutool-core/src/test/java/cn/hutool/v7/core/date/DateBetweenTest.java @@ -16,12 +16,13 @@ package cn.hutool.v7.core.date; -import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.time.temporal.ChronoUnit; import java.util.Date; +import static org.junit.jupiter.api.Assertions.assertEquals; + public class DateBetweenTest { @Test @@ -29,18 +30,18 @@ public class DateBetweenTest { final Date start = DateUtil.parse("2017-02-01 12:23:46"); final Date end = DateUtil.parse("2018-02-01 12:23:46"); final long betweenYear = new DateBetween(start, end).betweenYear(false); - Assertions.assertEquals(1, betweenYear); + assertEquals(1, betweenYear); final Date start1 = DateUtil.parse("2017-02-01 12:23:46"); final Date end1 = DateUtil.parse("2018-03-01 12:23:46"); final long betweenYear1 = new DateBetween(start1, end1).betweenYear(false); - Assertions.assertEquals(1, betweenYear1); + assertEquals(1, betweenYear1); // 不足1年 final Date start2 = DateUtil.parse("2017-02-01 12:23:46"); final Date end2 = DateUtil.parse("2018-02-01 11:23:46"); final long betweenYear2 = new DateBetween(start2, end2).betweenYear(false); - Assertions.assertEquals(0, betweenYear2); + assertEquals(0, betweenYear2); } @Test @@ -48,7 +49,7 @@ public class DateBetweenTest { final Date start = DateUtil.parse("2000-02-29"); final Date end = DateUtil.parse("2018-02-28"); final long betweenYear = new DateBetween(start, end).betweenYear(false); - Assertions.assertEquals(18, betweenYear); + assertEquals(18, betweenYear); } @Test @@ -59,7 +60,7 @@ public class DateBetweenTest { final Date edate = DateUtil.parse(dateStr2); final long result = DateUtil.betweenYear(sdate, edate, false); - Assertions.assertEquals(0, result); + assertEquals(0, result); } @Test @@ -70,7 +71,7 @@ public class DateBetweenTest { final Date edate = DateUtil.parse(dateStr2); final long result = DateUtil.betweenYear(sdate, edate, false); - Assertions.assertEquals(1, result); + assertEquals(1, result); } @Test @@ -82,7 +83,7 @@ public class DateBetweenTest { final Date edate = DateUtil.parse(dateStr2); final long result = DateUtil.betweenYear(sdate, edate, false); - Assertions.assertEquals(0, result); + assertEquals(0, result); } @Test @@ -90,18 +91,18 @@ public class DateBetweenTest { final Date start = DateUtil.parse("2017-02-01 12:23:46"); final Date end = DateUtil.parse("2018-02-01 12:23:46"); final long betweenMonth = new DateBetween(start, end).betweenMonth(false); - Assertions.assertEquals(12, betweenMonth); + assertEquals(12, betweenMonth); final Date start1 = DateUtil.parse("2017-02-01 12:23:46"); final Date end1 = DateUtil.parse("2018-03-01 12:23:46"); final long betweenMonth1 = new DateBetween(start1, end1).betweenMonth(false); - Assertions.assertEquals(13, betweenMonth1); + assertEquals(13, betweenMonth1); // 不足 final Date start2 = DateUtil.parse("2017-02-01 12:23:46"); final Date end2 = DateUtil.parse("2018-02-01 11:23:46"); final long betweenMonth2 = new DateBetween(start2, end2).betweenMonth(false); - Assertions.assertEquals(11, betweenMonth2); + assertEquals(11, betweenMonth2); } @Test @@ -109,7 +110,7 @@ public class DateBetweenTest { final Date date1 = DateUtil.parse("2017-03-01 20:33:23"); final Date date2 = DateUtil.parse("2017-03-01 23:33:23"); final String formatBetween = DateUtil.formatBetween(date1, date2, BetweenFormatter.Level.SECOND); - Assertions.assertEquals("3小时", formatBetween); + assertEquals("3小时", formatBetween); } @Test @@ -122,6 +123,19 @@ public class DateBetweenTest { TimeUtil.parse("2020-11-21", "yyy-MM-dd"), TimeUtil.parse("2020-11-23", "yyy-MM-dd"), ChronoUnit.WEEKS); - Assertions.assertEquals(betweenWeek, betweenWeek2); + assertEquals(betweenWeek, betweenWeek2); + } + + @Test + public void issueIDFVKGTest() { + Date b = new Date(1609459200000L); // 2021-01-01 00:00:00 + Date e = new Date(1609545600000L); // 2021-01-02 00:00:00 + DateBetween db = new DateBetween(b, e); + + // 修改原始 date + b.setTime(0L); // 1970-01-01 + + // 期望 DateBetween 不受影响,间隔仍为 1 天 + assertEquals(1, db.between(DateUnit.DAY)); } }