From a09da9fd3d19b36e6bbd64646439333ad6984da7 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 24 Jul 2025 16:16:32 +0800 Subject: [PATCH] =?UTF-8?q?`CalendarUtil`=E5=A2=9E=E5=8A=A0`isSameYear`?= =?UTF-8?q?=E5=92=8C`calendar`=E6=96=B9=E6=B3=95=EF=BC=88issue#3995@Github?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 +- .../cn/hutool/core/date/CalendarUtil.java | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56b07a2d7..dd746f58b 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,11 +2,12 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.40(2025-07-21) +# 5.8.40(2025-07-24) ### 🐣新特性 * 【captcha】 `MathGenerator`四则运算方式支持不生成负数结果(pr#1363@Gitee) * 【core 】 增加`MapValueProvider`和`RecordConverter`并支持Record转换(issue#3985@Github) +* 【core 】 `CalendarUtil`增加`isSameYear`和`calendar`方法(issue#3995@Github) ### 🐞Bug修复 * 【extra 】 `Sftp``reconnectIfTimeout`方法改为捕获所有异常(issue#3989@Github) diff --git a/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java index 2c133e18f..765d9434e 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/CalendarUtil.java @@ -74,6 +74,21 @@ public class CalendarUtil { return cal; } + /** + * 转换为指定时区的Calendar,返回新的Calendar + * + * @param calendar 时间 + * @param timeZone 新时区 + * @return 指定时区的新的calendar对象 + * @since 5.8.30 + */ + public static Calendar calendar(Calendar calendar, final TimeZone timeZone) { + // 转换到统一时区,例如UTC + calendar = (Calendar) calendar.clone(); + calendar.setTimeZone(timeZone); + return calendar; + } + /** * 是否为上午 * @@ -437,6 +452,30 @@ public class CalendarUtil { cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA); } + /** + * 比较两个日期是否为同一年
+ * 同一个年的意思是:ERA(公元)、year(年)都一致。 + * + * @param cal1 日期1 + * @param cal2 日期2 + * @return 是否为同一年 + * @since 5.8.30 + */ + public static boolean isSameYear(final Calendar cal1, Calendar cal2) { + if (cal1 == null || cal2 == null) { + throw new IllegalArgumentException("The date must not be null"); + } + + if (!ObjUtil.equals(cal1.getTimeZone(), cal2.getTimeZone())) { + // 统一时区 + cal2 = calendar(cal2, cal1.getTimeZone()); + } + + return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && // + // issue#3011@Github + cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA); + } + /** *

检查两个Calendar时间戳是否相同。

*