判断两个日期是否是同一周
参考
CSDN:java中如何判断两个日期是否是同一周
作者:machinecat0898
代码实现
/**
* 判断两个日期是否是同一周
* 设置周一为一周开始。
* 经过测试发现,只要12月的最后一周有一天跨越到明年,就会被当成明年的第一周,
* 所以判断两个日期跨年的时候,需要是连续的一周才能正确判断,判断方法就是判断小的年对应的月份是否为12月
* 如:“2022-12-31”和“2023-01-01”同是2023年的第一周
* 否则可能会误判两年的第一周为同一周,
* 如:误判“2022-01-01”和“2023-01-01”为同一周
*
* 默认周日为一周开始,原作者的示例:
* “2004-12-25”是星期六,也就是说它是2004年中第52周的星期六,
* 那么“2004-12-26”到底是2004年的第几周哪,java中经测试取得的它的Week值是1,
* 那么也就是说它被看作2005年的第一周了,这个处理是比较好的。
* 可以用来判断“2004-12-26”和“2005-1-1”是同一周。
* 参考:https://blog.csdn.net/machinecat0898/article/details/58598959
*
* @param date1 日期1,格式:yyyy-MM-dd
* @param date2 日期2,格式:yyyy-MM-dd
* @return boolean 返回ture说明是同一周
*/
@SneakyThrows
public static boolean isSameWeek(String date1, String date2) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = format.parse(date1);
Date d2 = format.parse(date2);
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
// 设置周一为一周开始
cal1.setFirstDayOfWeek(Calendar.MONDAY);
cal2.setFirstDayOfWeek(Calendar.MONDAY);
cal1.setTime(d1);
cal2.setTime(d2);
int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
// subYear == 0 说明是同一年
boolean isSameWeek = cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR);
if (subYear == 0) {
return isSameWeek;
} else if (subYear == 1 && cal2.get(Calendar.MONTH) == Calendar.DECEMBER) {
// subYear == 1 说明cal1比cal2大一年
return isSameWeek;
} else if (subYear == -1 && cal1.get(Calendar.MONTH) == Calendar.DECEMBER) {
// subYear == 1 说明cal1比cal2小一年
return isSameWeek;
}
return false;
}
public static void main(String[] args) {
String date1 = "2022-12-31";
String date2 = "2023-01-01";
boolean sameWeek = isSameWeek(date1, date2);
System.out.println("sameWeek:"+sameWeek);
}