From f7ab6b0ccf87c2a0e0e32ffebeec2cf27bab72e9 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 27 Jan 2022 09:04:23 +0800 Subject: [PATCH] add methods --- CHANGELOG.md | 4 +- .../java/cn/hutool/core/date/DateTime.java | 30 +++++++++++-- .../java/cn/hutool/core/date/DateUtil.java | 42 +++++++++---------- 3 files changed, 49 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 470e96df7..5bb8d6deb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.7.21 (2022-01-26) +# 5.7.21 (2022-01-27) ### 🐣新特性 * 【extra 】 增加jetbrick模板支持 @@ -12,6 +12,8 @@ * 【core 】 新增LocalDateTimeUtil.weekOfYear(issue#I4RWXC@Gitee) * 【core 】 Month增加toJdkMonth、getValueBaseOne * 【core 】 CsvWriter修改规则,去除末尾多余换行符(issue#I4RSQY@Gitee) +* 【core 】 DateUtil增加rangeFunc和rangeConsume(issue#I4RSQY@Gitee) +* 【core 】 DateTime增加setUseJdkToStringStyle方法 ### 🐞Bug修复 * 【core 】 修复ChineseDate农历获取正月出现数组越界BUG(issue#2112@Github) diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java b/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java index 76547adfc..2956eade4 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateTime.java @@ -24,13 +24,30 @@ import java.util.Locale; import java.util.TimeZone; /** - * 包装java.util.Date + * 包装{@link Date}
+ * 此类继承了{@link Date},并提供扩展方法,如时区等。
+ * 此类重写了父类的{@code toString()}方法,返回值为"yyyy-MM-dd HH:mm:ss"格式 * * @author xiaoleilu */ public class DateTime extends Date { private static final long serialVersionUID = -5395712593979185936L; + private static boolean useJdkToStringStyle = false; + + /** + * 设置全局的,是否使用{@link Date}默认的toString()格式
+ * 如果为{@code true},则调用toString()时返回"EEE MMM dd HH:mm:ss zzz yyyy"格式,
+ * 如果为{@code false},则返回"yyyy-MM-dd HH:mm:ss",
+ * 默认为{@code false} + * + * @param customUseJdkToStringStyle 是否使用{@link Date}默认的toString()格式 + * @since 5.7.21 + */ + public static void setUseJdkToStringStyle(boolean customUseJdkToStringStyle){ + useJdkToStringStyle = customUseJdkToStringStyle; + } + /** * 是否可变对象 */ @@ -932,13 +949,18 @@ public class DateTime extends Date { // -------------------------------------------------------------------- toString start /** - * 转为"yyyy-MM-dd HH:mm:ss" 格式字符串
- * 如果时区被设置,会转换为其时区对应的时间,否则转换为当前地点对应的时区 + * 转为字符串,如果时区被设置,会转换为其时区对应的时间,否则转换为当前地点对应的时区
+ * 可以调用{@link DateTime#setUseJdkToStringStyle(boolean)} 方法自定义默认的风格
+ * 如果{@link #useJdkToStringStyle}为{@code true},返回"EEE MMM dd HH:mm:ss zzz yyyy"格式,
+ * 如果为{@code false},则返回"yyyy-MM-dd HH:mm:ss" * - * @return "yyyy-MM-dd HH:mm:ss" 格式字符串 + * @return 格式字符串 */ @Override public String toString() { + if(useJdkToStringStyle){ + return super.toString(); + } return toString(this.timeZone); } diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java index 268083716..164855a09 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -20,7 +20,15 @@ import java.time.LocalDateTime; import java.time.Year; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; -import java.util.*; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collections; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.TimeZone; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.function.Function; @@ -1888,23 +1896,19 @@ public class DateUtil extends CalendarUtil { * @param end 结束日期时间 * @param unit 步进单位 * @param func 每次遍历要执行的 function - * @param - * @return + * @param Date经过函数处理结果类型 + * @return 结果列表 + * @since 5.7.21 */ public static List rangeFunc(Date start, Date end, final DateField unit, Function func) { if (start == null || end == null || start.after(end)) { return Collections.emptyList(); - } else { - ArrayList list = new ArrayList<>(); - DateRange dateRange = range(start, end, unit); - while (dateRange.hasNext()) { - DateTime next = dateRange.next(); - Date date = next.toJdkDate(); - T result = func.apply(date); - list.add(result); - } - return list; } + ArrayList list = new ArrayList<>(); + for(DateTime date : range(start, end, unit)){ + list.add(func.apply(date)); + } + return list; } /** @@ -1914,19 +1918,13 @@ public class DateUtil extends CalendarUtil { * @param end 结束日期时间 * @param unit 步进单位 * @param consumer 每次遍历要执行的 consumer - * @return + * @since 5.7.21 */ public static void rangeConsume(Date start, Date end, final DateField unit, Consumer consumer) { if (start == null || end == null || start.after(end)) { return; - } else { - DateRange dateRange = range(start, end, unit); - while (dateRange.hasNext()) { - DateTime next = dateRange.next(); - Date date = next.toJdkDate(); - consumer.accept(date); - } } + range(start, end, unit).forEach(consumer); } /** @@ -1937,7 +1935,7 @@ public class DateUtil extends CalendarUtil { * @param unit 步进单位 * @return {@link DateRange} */ - public static List rangeToList(Date start, Date end, final DateField unit) { + public static List rangeToList(Date start, Date end, DateField unit) { return CollUtil.newArrayList((Iterable) range(start, end, unit)); }