JAVA获取某一周下所有日期

假如我现在要获取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]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值