diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e56b43c3..968c289f7 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ * 【core 】 增加IJSONTypeConverter,避免反射调用(pr#1051@Gitee) * 【http 】 优化HttpUtil.urlWithForm方法(pr#1052@Gitee) * 【http 】 优化HttpUtil.urlWithForm方法(pr#1052@Gitee) +* 【cron 】 优化PatternParser支持年的步进(issue#I7SMP7@Gitee) ### 🐞Bug修复 * 【core 】 修复NumberUtil.toBigDecimal转换科学计数法问题(issue#3241@Github) diff --git a/hutool-cron/src/main/java/cn/hutool/cron/pattern/parser/PartParser.java b/hutool-cron/src/main/java/cn/hutool/cron/pattern/parser/PartParser.java index 05cb0d350..1f0107df0 100644 --- a/hutool-cron/src/main/java/cn/hutool/cron/pattern/parser/PartParser.java +++ b/hutool-cron/src/main/java/cn/hutool/cron/pattern/parser/PartParser.java @@ -3,6 +3,7 @@ package cn.hutool.cron.pattern.parser; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.Month; import cn.hutool.core.date.Week; +import cn.hutool.core.lang.Console; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.cron.CronException; @@ -74,7 +75,7 @@ public class PartParser { } final List values = parseArray(value); - if (values.size() == 0) { + if (values.isEmpty()) { throw new CronException("Invalid part value: [{}]", value); } @@ -253,6 +254,12 @@ public class PartParser { i = Week.SUNDAY.ordinal(); } + // issue#I7SMP7 + // 年的形式中,如果类似于*/2,不做范围检查 + if(Part.YEAR.equals(this.part)){ + return i; + } + return part.checkValue(i); } diff --git a/hutool-cron/src/test/java/cn/hutool/cron/pattern/IssueI7SMP7Test.java b/hutool-cron/src/test/java/cn/hutool/cron/pattern/IssueI7SMP7Test.java new file mode 100755 index 000000000..3a107f54a --- /dev/null +++ b/hutool-cron/src/test/java/cn/hutool/cron/pattern/IssueI7SMP7Test.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023 looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * http://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package cn.hutool.cron.pattern; + +import cn.hutool.cron.pattern.matcher.PatternMatcher; +import cn.hutool.cron.pattern.parser.PatternParser; +import org.junit.Assert; +import org.junit.Test; + +import java.util.List; + +public class IssueI7SMP7Test { + @Test + public void parseTest() { + final List parse = PatternParser.parse("0 0 3 1 1 ? */1"); + Assert.assertNotNull(parse); + } +}