获取两个日期的周数并记录周开始日期和周结束日期

本文介绍了一种算法,该算法能够根据指定的开始日期和结束日期计算出这两个日期之间的所有完整周,并给出每周的起始和结束日期。具体实现包括了如何确定每周的第一天,如何计算总共有多少周以及如何获取每一段周期内的日期范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String start = "2017-01-27";
String end = "2017-12-27"
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        if( list != null && list.size() == 1){
            for (Map map : list) {
            long CONST_WEEK = 1000 * 3600 * 24 * 7;//一周毫秒数
            try {
                Date start =  sdf.parse(start );
                Date end =  sdf.parse(end );

                Calendar startCal = Calendar.getInstance();
                startCal.setTime(start);

                Calendar endCal = Calendar.getInstance();
                endCal.setTime(end);

                Date now = new Date();
                Calendar nowCal = Calendar.getInstance();
                nowCal.setTime(now);

                //查找开始日期的那个星期的第一天
                int dayOfWeek = startCal.get(Calendar.DAY_OF_WEEK);
                startCal.add(Calendar.DATE, -(dayOfWeek -1));//周日是第一天 所以-1
                //查找结束日期的那个星期的第一天
                dayOfWeek = endCal.get(Calendar.DAY_OF_WEEK);
                endCal.add(Calendar.DATE, 7-(dayOfWeek-1));

                //计算总共多少周
                int total = (int) ((endCal.getTimeInMillis() - startCal.getTimeInMillis()) / CONST_WEEK);


                for (int i = 0; i < total ;i++ ) {
                    HashMap<String, String> week = new HashMap<String, String>();
                    week.put("index", String.valueOf(i+1));
                    week.put("title", "第"+(i+1)+"周");
                    startCal.add(Calendar.DATE, 1);
                    String time = sdf.format(startCal.getTime());//第一天
                    startCal.add(Calendar.DATE, 6);
                    time += "~"+sdf.format(startCal.getTime());//最后一天
                    week.put("time", time);
                    weeks.add(week);
                }
            } catch (ParseException e) {
                e.printStackTrace();
            }
            }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值