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 {
|
public class CalendarUtil {
|
||||||
|
|
||||||
|
// region ----- calendar
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建Calendar对象,时间为默认时区的当前时间
|
* 创建Calendar对象,时间为默认时区的当前时间
|
||||||
*
|
*
|
||||||
@@ -96,6 +98,21 @@ public class CalendarUtil {
|
|||||||
return cal;
|
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
|
* @param cal2 日期2
|
||||||
* @return 是否为同一天
|
* @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);
|
return isSameYear(cal1, cal2) && cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -400,7 +421,13 @@ public class CalendarUtil {
|
|||||||
|
|
||||||
// 防止比较前修改原始Calendar对象
|
// 防止比较前修改原始Calendar对象
|
||||||
cal1 = (Calendar) cal1.clone();
|
cal1 = (Calendar) cal1.clone();
|
||||||
cal2 = (Calendar) cal2.clone();
|
|
||||||
|
if (ObjUtil.notEquals(cal1.getTimeZone(), cal2.getTimeZone())) {
|
||||||
|
// 统一时区
|
||||||
|
cal2 = calendar(cal2, cal1.getTimeZone());
|
||||||
|
} else {
|
||||||
|
cal2 = (Calendar) cal2.clone();
|
||||||
|
}
|
||||||
|
|
||||||
// 把所传日期设置为其当前周的第一天
|
// 把所传日期设置为其当前周的第一天
|
||||||
// 比较设置后的两个日期是否是同一天:true 代表同一周
|
// 比较设置后的两个日期是否是同一天:true 代表同一周
|
||||||
@@ -427,7 +454,12 @@ public class CalendarUtil {
|
|||||||
* @return 是否为同一月
|
* @return 是否为同一月
|
||||||
* @since 5.4.1
|
* @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);
|
return isSameYear(cal1, cal2) && cal1.get(Calendar.MONTH) == cal2.get(Calendar.MONTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -439,10 +471,16 @@ public class CalendarUtil {
|
|||||||
* @param cal2 日期2
|
* @param cal2 日期2
|
||||||
* @return 是否为同一年
|
* @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) {
|
if (cal1 == null || cal2 == null) {
|
||||||
throw new IllegalArgumentException("The date must not be 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) && //
|
return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR) && //
|
||||||
// issue#3011@Github
|
// issue#3011@Github
|
||||||
cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA);
|
cal1.get(Calendar.ERA) == cal2.get(Calendar.ERA);
|
||||||
|
Reference in New Issue
Block a user