mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
解决CalendarUtil.isSameDay时区不同导致结果错误问题
This commit is contained in:
@@ -38,6 +38,8 @@ import java.util.TimeZone;
|
||||
*/
|
||||
public class CalendarUtil {
|
||||
|
||||
// region ----- calendar
|
||||
|
||||
/**
|
||||
* 创建Calendar对象,时间为默认时区的当前时间
|
||||
*
|
||||
@@ -96,6 +98,21 @@ public class CalendarUtil {
|
||||
return cal;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换为指定时区的Calendar,返回新的Calendar
|
||||
*
|
||||
* @param calendar 时间
|
||||
* @param timeZone 新时区
|
||||
* @return 指定时区的新的calendar对象
|
||||
*/
|
||||
public static Calendar calendar(Calendar calendar, final TimeZone timeZone) {
|
||||
// 转换到统一时区,例如UTC
|
||||
calendar = (Calendar) calendar.clone();
|
||||
calendar.setTimeZone(timeZone);
|
||||
return calendar;
|
||||
}
|
||||
// endregion
|
||||
|
||||
/**
|
||||
* 是否为上午
|
||||
*
|
||||
@@ -379,7 +396,11 @@ public class CalendarUtil {
|
||||
* @param cal2 日期2
|
||||
* @return 是否为同一天
|
||||
*/
|
||||
public static boolean isSameDay(final Calendar cal1, final Calendar cal2) {
|
||||
public static boolean isSameDay(final Calendar cal1, Calendar cal2) {
|
||||
if (ObjUtil.notEquals(cal1.getTimeZone(), cal2.getTimeZone())) {
|
||||
// 统一时区
|
||||
cal2 = calendar(cal2, cal1.getTimeZone());
|
||||
}
|
||||
return isSameYear(cal1, cal2) && cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR);
|
||||
}
|
||||
|
||||
@@ -400,7 +421,13 @@ public class CalendarUtil {
|
||||
|
||||
// 防止比较前修改原始Calendar对象
|
||||
cal1 = (Calendar) cal1.clone();
|
||||
|
||||
if (ObjUtil.notEquals(cal1.getTimeZone(), cal2.getTimeZone())) {
|
||||
// 统一时区
|
||||
cal2 = calendar(cal2, cal1.getTimeZone());
|
||||
} else {
|
||||
cal2 = (Calendar) cal2.clone();
|
||||
}
|
||||
|
||||
// 把所传日期设置为其当前周的第一天
|
||||
// 比较设置后的两个日期是否是同一天:true 代表同一周
|
||||
@@ -427,7 +454,12 @@ public class CalendarUtil {
|
||||
* @return 是否为同一月
|
||||
* @since 5.4.1
|
||||
*/
|
||||
public static boolean isSameMonth(final Calendar cal1, final Calendar cal2) {
|
||||
public static boolean isSameMonth(final Calendar cal1, Calendar cal2) {
|
||||
if (ObjUtil.notEquals(cal1.getTimeZone(), cal2.getTimeZone())) {
|
||||
// 统一时区
|
||||
cal2 = calendar(cal2, cal1.getTimeZone());
|
||||
}
|
||||
|
||||
return isSameYear(cal1, cal2) && cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH);
|
||||
}
|
||||
|
||||
@@ -439,10 +471,16 @@ public class CalendarUtil {
|
||||
* @param cal2 日期2
|
||||
* @return 是否为同一年
|
||||
*/
|
||||
public static boolean isSameYear(final Calendar cal1, final Calendar cal2) {
|
||||
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.notEquals(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);
|
||||
|
Reference in New Issue
Block a user