diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateRange.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateRange.java index f3cca0375..2c58d0da6 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateRange.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateRange.java @@ -64,6 +64,10 @@ public class DateRange extends Range { */ public DateRange(final Date start, final Date end, final DateField unit, final int step, final boolean isIncludeStart, final 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/org/dromara/hutool/core/date/DateRangeTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/date/DateRangeTest.java new file mode 100644 index 000000000..5e0ca553a --- /dev/null +++ b/hutool-core/src/test/java/org/dromara/hutool/core/date/DateRangeTest.java @@ -0,0 +1,27 @@ +package org.dromara.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()); + } +}