From 55bd8afcef0b6a5619d3db8bb34804e4e9fde0e2 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 6 Nov 2024 12:50:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DDateUtil.rangeToList=E4=B8=AD?= =?UTF-8?q?step=E5=B0=8F=E4=BA=8E=E7=AD=89=E4=BA=8E0=E6=97=B6=E6=97=A0?= =?UTF-8?q?=E9=99=90=E5=BE=AA=E7=8E=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 ++- .../java/cn/hutool/core/date/DateRange.java | 4 +++ .../cn/hutool/core/date/DateRangeTest.java | 27 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 hutool-core/src/test/java/cn/hutool/core/date/DateRangeTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 1db5f8141..3a2dd7879 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,11 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.34(2024-11-05) +# 5.8.34(2024-11-06) ### 🐣新特性 ### 🐞Bug修复 +* 【core 】 修复DateUtil.rangeToList中step小于等于0时无限循环问题(issue#3783@Github) ------------------------------------------------------------------------------------------------------------- # 5.8.33(2024-11-05) diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateRange.java b/hutool-core/src/main/java/cn/hutool/core/date/DateRange.java index 0e91132a4..69183f3a9 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateRange.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateRange.java @@ -48,6 +48,10 @@ public class DateRange extends Range { */ public DateRange(Date start, Date end, DateField unit, int step, boolean isIncludeStart, boolean isIncludeEnd) { super(DateUtil.date(start), DateUtil.date(end), (current, end1, index) -> { + if(step <= 0){ + // issue#3783 + return null; + } final DateTime dt = DateUtil.date(start).offsetNew(unit, (index + 1) * step); if (dt.isAfter(end1)) { return null; diff --git a/hutool-core/src/test/java/cn/hutool/core/date/DateRangeTest.java b/hutool-core/src/test/java/cn/hutool/core/date/DateRangeTest.java new file mode 100644 index 000000000..0a6404d26 --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateRangeTest.java @@ -0,0 +1,27 @@ +package cn.hutool.core.date; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Date; +import java.util.List; + +public class DateRangeTest { + @Test + void issue3783Test() { + final Date start = DateUtil.parse("2024-01-01"); + final Date end = DateUtil.parse("2024-02-01"); + final List dateTimes = DateUtil.rangeToList(start, end, DateField.DAY_OF_MONTH, 0); + Assertions.assertEquals(1, dateTimes.size()); + Assertions.assertEquals("2024-01-01 00:00:00", dateTimes.get(0).toString()); + } + + @Test + void issue3783Test2() { + final Date start = DateUtil.parse("2024-01-01"); + final Date end = DateUtil.parse("2024-02-01"); + final List dateTimes = DateUtil.rangeToList(start, end, DateField.DAY_OF_MONTH, -2); + Assertions.assertEquals(1, dateTimes.size()); + Assertions.assertEquals("2024-01-01 00:00:00", dateTimes.get(0).toString()); + } +}