diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/CalendarUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/CalendarUtil.java index d68f8e0f6..78127dee8 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/date/CalendarUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/CalendarUtil.java @@ -13,6 +13,7 @@ package org.dromara.hutool.core.date; import org.dromara.hutool.core.comparator.CompareUtil; +import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.math.ChineseNumberFormatter; import org.dromara.hutool.core.date.format.GlobalCustomFormat; import org.dromara.hutool.core.date.format.parser.DateParser; @@ -577,6 +578,20 @@ public class CalendarUtil { return calendar.getActualMaximum(dateField); } + /** + * 获得日期的某个部分
+ * 例如获得年的部分,则使用 getField(DatePart.YEAR) + * + * @param calendar {@link Calendar} + * @param field 表示日期的哪个部分的枚举 {@link DateField} + * @return 某个部分的值 + * @since 6.0.0 + */ + @SuppressWarnings("MagicConstant") + public static int getField(final Calendar calendar, final DateField field) { + return Assert.notNull(calendar).get(Assert.notNull(field).getValue()); + } + /** * Calendar{@link Instant}对象 * @@ -596,6 +611,9 @@ public class CalendarUtil { * @since 5.0.5 */ public static LocalDateTime toLocalDateTime(final Calendar calendar) { + if(null == calendar){ + return null; + } return LocalDateTime.ofInstant(calendar.toInstant(), calendar.getTimeZone().toZoneId()); } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateField.java b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateField.java index d7ed72a3f..1af11add0 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/date/DateField.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/date/DateField.java @@ -19,7 +19,6 @@ import java.util.Calendar; * 与Calendar相应值对应 * * @author Looly - * */ public enum DateField { @@ -121,6 +120,11 @@ public enum DateField { this.value = value; } + /** + * 获取{@link Calendar}中对应的值 + * + * @return {@link Calendar}中对应的值 + */ public int getValue() { return this.value; } @@ -133,38 +137,38 @@ public enum DateField { */ public static DateField of(final int calendarPartIntValue) { switch (calendarPartIntValue) { - case Calendar.ERA: - return ERA; - case Calendar.YEAR: - return YEAR; - case Calendar.MONTH: - return MONTH; - case Calendar.WEEK_OF_YEAR: - return WEEK_OF_YEAR; - case Calendar.WEEK_OF_MONTH: - return WEEK_OF_MONTH; - case Calendar.DAY_OF_MONTH: - return DAY_OF_MONTH; - case Calendar.DAY_OF_YEAR: - return DAY_OF_YEAR; - case Calendar.DAY_OF_WEEK: - return DAY_OF_WEEK; - case Calendar.DAY_OF_WEEK_IN_MONTH: - return DAY_OF_WEEK_IN_MONTH; - case Calendar.AM_PM: - return AM_PM; - case Calendar.HOUR: - return HOUR; - case Calendar.HOUR_OF_DAY: - return HOUR_OF_DAY; - case Calendar.MINUTE: - return MINUTE; - case Calendar.SECOND: - return SECOND; - case Calendar.MILLISECOND: - return MILLISECOND; - default: - return null; + case Calendar.ERA: + return ERA; + case Calendar.YEAR: + return YEAR; + case Calendar.MONTH: + return MONTH; + case Calendar.WEEK_OF_YEAR: + return WEEK_OF_YEAR; + case Calendar.WEEK_OF_MONTH: + return WEEK_OF_MONTH; + case Calendar.DAY_OF_MONTH: + return DAY_OF_MONTH; + case Calendar.DAY_OF_YEAR: + return DAY_OF_YEAR; + case Calendar.DAY_OF_WEEK: + return DAY_OF_WEEK; + case Calendar.DAY_OF_WEEK_IN_MONTH: + return DAY_OF_WEEK_IN_MONTH; + case Calendar.AM_PM: + return AM_PM; + case Calendar.HOUR: + return HOUR; + case Calendar.HOUR_OF_DAY: + return HOUR_OF_DAY; + case Calendar.MINUTE: + return MINUTE; + case Calendar.SECOND: + return SECOND; + case Calendar.MILLISECOND: + return MILLISECOND; + default: + return null; } } } diff --git a/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/PatternUtil.java b/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/PatternUtil.java index 54f0ab679..ffd0fcb67 100644 --- a/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/PatternUtil.java +++ b/hutool-cron/src/main/java/org/dromara/hutool/cron/pattern/PatternUtil.java @@ -59,9 +59,9 @@ class PatternUtil { final int minute = calendar.get(Calendar.MINUTE); final int hour = calendar.get(Calendar.HOUR_OF_DAY); final int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); - final int month = calendar.get(Calendar.MONTH) + 1;// 月份从1开始 - final int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; // 星期从0开始,0和7都表示周日 + final int monthBase1 = calendar.get(Calendar.MONTH) + 1;// 月份从1开始 + final int dayOfWeekBase0 = calendar.get(Calendar.DAY_OF_WEEK) - 1; // 星期从0开始,0和7都表示周日 final int year = calendar.get(Calendar.YEAR); - return new int[]{second, minute, hour, dayOfMonth, month, dayOfWeek, year}; + return new int[]{second, minute, hour, dayOfMonth, monthBase1, dayOfWeekBase0, year}; } } diff --git a/hutool-cron/src/test/java/org/dromara/hutool/cron/pattern/IssueI92H5HTest.java b/hutool-cron/src/test/java/org/dromara/hutool/cron/pattern/IssueI92H5HTest.java index 5d4ce2383..651fa19f8 100644 --- a/hutool-cron/src/test/java/org/dromara/hutool/cron/pattern/IssueI92H5HTest.java +++ b/hutool-cron/src/test/java/org/dromara/hutool/cron/pattern/IssueI92H5HTest.java @@ -14,6 +14,7 @@ package org.dromara.hutool.cron.pattern; import org.dromara.hutool.core.date.DateTime; import org.dromara.hutool.core.date.DateUtil; +import org.dromara.hutool.core.lang.Console; import org.junit.jupiter.api.Test; import java.util.Calendar; @@ -28,6 +29,6 @@ public class IssueI92H5HTest { final CronPattern pattern = new CronPattern("0 0 0 L 2 ?"); //noinspection ConstantConditions final Calendar calendar = pattern.nextMatchAfter(date.toCalendar()); - System.out.println(DateUtil.date(calendar)); + Console.log(DateUtil.date(calendar)); } }