java工具类:生成指定时间范围内的所有连续的日期、月份、周数集合

    /**
     * 计算两个时间中所有的月份
     * @param date1 开始时间
     * @param date2 结束时间
     * @return
     * @throws ParseException
     */
    public static List<String> getMonths(String date1, String date2) throws ParseException{
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

        Date parse = sdf.parse(date1);
        Date parse2 = sdf.parse(date2);
        List<String> dateList = new ArrayList<>();
        Calendar c1=Calendar.getInstance();
        c1.setTime(parse);
        //转为周一
        int year = c1.get(Calendar.YEAR);
        int month = c1.get(Calendar.MONTH);
        c1.set(year, month, 1, 0, 0, 0);
        Calendar c2=Calendar.getInstance();
        c2.setTime(parse2);
        int weekYear2 = c2.get(Calendar.YEAR);
        int weekOfYear2 = c2.get(Calendar.WEEK_OF_YEAR);
        c2.setWeekDate(weekYear2, weekOfYear2, Calendar.SUNDAY);
        while (true) {
            int tempMonth = c1.get(Calendar.MONTH);
            String date = c1.getWeekYear() + "-" + ((tempMonth + 1) <= 9 ? "0" + (tempMonth + 1) : tempMonth + 1);
            System.out.println(date);

            dateList.add(date);
            //下一个月<结束日期
            c1.set(Calendar.MONTH, tempMonth +1);
            if(c1.getTimeInMillis()>=c2.getTimeInMillis()){
                break;
            }
        }

        return dateList;
    }

    /**
     * 计算两个时间内 所有的周数
     * @param date1
     * @param date2
     * @return
     * @throws ParseException
     */
    public static List<String> getWeeks(String date1, String date2) throws ParseException{
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date parse = sdf.parse(date1);
        Date parse2 = sdf.parse(date2);

        List<String> dateList = new ArrayList<>();
        Calendar c1=Calendar.getInstance();
        c1.setTime(parse);
        //转为周一
        int weekYear = c1.get(Calendar.YEAR);
        int weekOfYear = c1.get(Calendar.WEEK_OF_YEAR);
        c1.setWeekDate(weekYear, weekOfYear, Calendar.MONDAY);
        Calendar c2=Calendar.getInstance();
        c2.setTime(parse2);
        int weekYear2 = c2.get(Calendar.YEAR);
        int weekOfYear2 = c2.get(Calendar.WEEK_OF_YEAR);
        c2.setWeekDate(weekYear2, weekOfYear2, Calendar.SUNDAY);
        while (true) {
            int weekNum = c1.get(Calendar.WEEK_OF_YEAR);
            System.out.println(sdf.format(c1.getTime())+" : "+weekNum);
            dateList.add(c1.getWeekYear() + "-" + (weekNum > 9 ? weekNum : "0" + weekNum));
            if (c1.getTimeInMillis() >= c2.getTimeInMillis()) {
                break;
            }
            //增加7天
            c1.setTimeInMillis(c1.getTimeInMillis()+1000*60*60*24*7);
        }
        return dateList;
    }

    /**
     * 计算两个时间内所有日期
     * @param date1
     * @param date2
     * @return
     * @throws ParseException
     */
    public static List<String> getDays(String date1, String date2) throws ParseException{
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Long startTime = sdf.parse(date1).getTime();
        Long endTime = sdf.parse(date2).getTime();

        List<String> dateList = new ArrayList<String>();
        Long oneDay = 1000 * 60 * 60 * 24l;

        Long time = startTime;
        while (time <= endTime) {
            Date d = new Date(time);
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            String date=df.format(d);
            System.out.println(date);
            dateList.add(date);
            time += oneDay;
        }
        return dateList;
    }

效果展示:

1,生成连续的日期:(年-月-日)

 

2,生成连续的月份(年-月)

3,生成连续的周数(年-周数)

 

 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以使用Java中的Calendar类来计算两个日期之间相差的周数。具体步骤如下: 1. 创建两个Calendar对象,分别表示要比较的两个日期。 2. 使用Calendar对象的get()方法获取两个日期的年、月、日。 3. 使用Calendar对象的set()方法将日期设置为每周的第一天(例如将日期设置为周日)。 4. 使用Calendar对象的add()方法将日期向后移动到下一个周日。 5. 使用Calendar对象的getTimeInMillis()方法获取日期的毫秒数,计算两个日期相差的毫秒数。 6. 将毫秒数转换为周数。 代码示例: ```java import java.util.Calendar; public class DateUtil { public static int getWeeksBetween(Calendar startDate, Calendar endDate) { //将日期设置为每周的第一天 startDate.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); endDate.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); //将日期向后移动到下一个周日 startDate.add(Calendar.DATE, 7); endDate.add(Calendar.DATE, 7); //获取日期的毫秒数 long startTime = startDate.getTimeInMillis(); long endTime = endDate.getTimeInMillis(); long diffTime = endTime - startTime; //将毫秒数转换为周数 int weeks = (int) (diffTime / (7 * 24 * 60 * 60 * 1000)); return weeks; } public static void main(String[] args) { Calendar startDate = Calendar.getInstance(); startDate.set(2021, 4, 1); //设置起始日期为2021年5月1日 Calendar endDate = Calendar.getInstance(); endDate.set(2021, 5, 1); //设置终止日期为2021年6月1日 int weeks = getWeeksBetween(startDate, endDate); System.out.println("两个日期相差" + weeks + "周"); } } ``` 输出结果为: ``` 两个日期相差4周 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ivan_梦方舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值