Java日期工具类DateUtils

本文档展示了如何使用Java编程计算两个日期范围内的周数、月份列表和完整日期列表。getDayInWeek方法计算给定日期所在的年周数,getMonths和getWeeks分别返回两个时间段内所有的月份和周数,而getDays则列出所有日期。

目录

获取日期所在年中的周数

计算两个时间内所有的月份

计算两个时间内所有的周数

计算两个时间内所有日期

获取日期所在年中的周数

    /**
     * 获取日期所在一年中的周数
     * @param time
     * @return
     */
    public static String getDayInWeek(String time) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = format.parse(time);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Calendar calendar = Calendar.getInstance();
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.setTime(date);
        String i = calendar.get(Calendar.YEAR)+"-"+calendar.get(Calendar.WEEK_OF_YEAR);
        return i;
    }

结果:

       String dayInWeek = DateUtils.getDayInWeek("2022-06-28");
       System.out.println(dayInWeek); //2022-27

计算两个时间内所有的月份

   /**
     * 计算两个时间中所有的月份
     * @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);

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

        return dateList;
    }

结果:

        List<String> months = DateUtils.getMonths("2022-05-28", "2022-06-28");
        System.out.println(months);//[2022-05, 2022-06]

计算两个时间内所有的周数

/**
     * 计算两个时间内 所有的周数
     * @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);
            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;
    }

结果:

        List<String> weeks = DateUtils.getWeeks("2022-05-28", "2022-06-28");
        System.out.println(weeks);
        //[2022-22, 2022-23, 2022-24, 2022-25, 2022-26, 2022-27]

计算两个时间内所有日期

   /**
     * 计算两个时间内所有日期
     * @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);
            dateList.add(date);
            time += oneDay;
        }
        return dateList;
    }

结果:

        List<String> days = DateUtils.getDays("2022-05-28", "2022-06-28");
        System.out.println(days);
//[2022-05-28, 2022-05-29, 2022-05-30, 2022-05-31, 2022-06-01, 2022-06-02, 2022-06-03, 2022-06-04, 2022-06-05, 2022-06-06, 2022-06-07, 2022-06-08, 2022-06-09, 2022-06-10, 2022-06-11, 2022-06-12, 2022-06-13, 2022-06-14, 2022-06-15, 2022-06-16, 2022-06-17, 2022-06-18, 2022-06-19, 2022-06-20, 2022-06-21, 2022-06-22, 2022-06-23, 2022-06-24, 2022-06-25, 2022-06-26, 2022-06-27, 2022-06-28]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值