假如我现在要获取2020年8月1日所在月下所在周的所有日期,则返回2020-08-01,2020-08-02;
假如我现在要获取2020年8月6日所在月下所在周的所有日期,则返回2020-08-03,2020-08-04,2020-08-05,2020-08-06,2020-08-07,2020-08-08,2020-08-09;
假如我现在要获取2020年8月31日所在月下所在周的所有日期,则返回2020-08-31;
1.代码
public static List<Date> getWeekOfMonthAllDay(Date date){
Calendar calendar = Calendar.getInstance();//这个是获取当前时间吗?
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH)+1;//获取日期的月份
int mon = calendar.get(Calendar.DAY_OF_WEEK);//获取日期在本周属于第几日
//Calendar类的一周是从周日到周六,中国习惯周一到周日
//所以如果是本周第1天,则为周日,在中国应该为本周第7天,其他日期-1即可对应
mon = mon==1?7:mon-1;
//获取本周第1天(周一)
calendar.add(Calendar.DATE,1-mon);
Date monday = calendar.getTime();
//获取本周第7天(周日)
calendar.add(Calendar.DATE,6);
Date sunday = calendar.getTime();
List<Date> dateList = new ArrayList<>();
Date forDay = monday;//用于存在本周每一天
while (forDay.getTime()<=sunday.getTime()){
//从周一开始计算
calendar.setTime(forDay);
int relMonth = calendar.get(Calendar.MONTH)+1;
//判断日期是否在同一个月份,既排除 非所在月下所在周日期
if(relMonth == month){
dateList.add(forDay);
}
calendar.add(Calendar.DATE,1);
forDay = calendar.getTime();
}
return dateList;
}
2.测试代码
public static void main(String[] args) throws ParseException {
//根据某一日期获取该日期所在月下所在周的所有日期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = simpleDateFormat.parse("2020-08-01");
Date date2 = simpleDateFormat.parse("2020-08-06");
Date date3 = simpleDateFormat.parse("2020-08-31");
List<Date> dateList = getWeekOfMonthAllDay(date);
List<Date> dateList2 = getWeekOfMonthAllDay(date2);
List<Date> dateList3 = getWeekOfMonthAllDay(date3);
System.out.println("2020-08-01所在月下所在周所以日期:"+dateList);
System.out.println("2020-08-06所在月下所在周所以日期:"+dateList2);
System.out.println("2020-08-31所在月下所在周所以日期:"+dateList3);
}
3.运行结果
2020-08-01所在月下所在周所以日期:[Sat Aug 01 00:00:00 CST 2020, Sun Aug 02 00:00:00 CST 2020]
2020-08-06所在月下所在周所以日期:[Mon Aug 03 00:00:00 CST 2020, Tue Aug 04 00:00:00 CST 2020, Wed Aug 05 00:00:00 CST 2020, Thu Aug 06 00:00:00 CST 2020, Fri Aug 07 00:00:00 CST 2020, Sat Aug 08 00:00:00 CST 2020, Sun Aug 09 00:00:00 CST 2020]
2020-08-31所在月下所在周所以日期:[Mon Aug 31 00:00:00 CST 2020]