各种时间处理的工具类(持续更新。。。)

目录

9. 根据日期获取一周的日期列表

8.Calender获取星期几

7.Calender设置年月日时分秒

6.计算两个日期相差的天数

5.返回一个月的日期列表

1.获取两个时间段之间的所有时间

2.获取两个时间相差的月份数

3.传入一个时间,返回这个月的开始和结束时间

4.使用Calendar月份加1


9. 根据日期获取一周的日期列表

public static void main(String[] args) throws Exception{
        String dateStr = "2023-9-4";

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = dateFormat.parse(dateStr);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

        List<Date> weekDateList = getWeekDateListByNowDate(calendar.getTime());
        //获取到的一周日期列表
        for (Date tempDate : weekDateList) {
            System.out.println(dateFormat.format(tempDate));
        }
    }

    /**获取一周列表
     * @param nowDate 这个时间内的一周(为空取当前时间)
     * @return list
     */
    private static List<Date> getWeekDateListByNowDate(Date nowDate) {
        List<Date> weekDateList = new ArrayList<>();

        Calendar calendar = Calendar.getInstance();
        if (nowDate != null) {
            calendar.setTime(nowDate);
        }

        weekDateList.add(calendar.getTime());

        List<Date> subtractDateList;
        List<Date> addDateList;


        switch (calendar.get(Calendar.DAY_OF_WEEK)) {
            case 2:
//                weekStr = "星期一";
                addDateList = getAddDateList(1, 6, calendar.getTime());
                subtractDateList = getSubtractDateList(1,0, calendar.getTime());
                break;
            case 3:
//                weekStr = "星期二";
                addDateList = getAddDateList(1, 5, calendar.getTime());
                subtractDateList = getSubtractDateList(1,1, calendar.getTime());
                break;
            case 4:
//                weekStr = "星期三";
                addDateList = getAddDateList(1, 4, calendar.getTime());
                subtractDateList = getSubtractDateList(1,2, calendar.getTime());
                break;
            case 5:
//                weekStr = "星期四";
                addDateList = getAddDateList(1, 3, calendar.getTime());
                subtractDateList = getSubtractDateList(1,3, calendar.getTime());
                break;
            case 6:
//                weekStr = "星期五";
                addDateList = getAddDateList(1, 2, calendar.getTime());
                subtractDateList = getSubtractDateList(1,4, calendar.getTime());
                break;
            case 7:
//                weekStr = "星期六";
                addDateList = getAddDateList(1, 1, calendar.getTime());
                subtractDateList = getSubtractDateList(1,5, calendar.getTime());
                break;
            case 1:
                //1 是星期日,如果是星期日的话说明是本周最后一天,日期时间往回移
//                weekStr = "星期日";
                addDateList = getAddDateList(1, 0, calendar.getTime());
                subtractDateList = getSubtractDateList(1, 6, calendar.getTime());
                break;
            default:
                addDateList = new ArrayList<>();
                subtractDateList = new ArrayList<>();
        }

        weekDateList.addAll(addDateList);
        weekDateList.addAll(subtractDateList);

        //对结果进行排序, 按请specialName升序
        Collections.sort(weekDateList, new Comparator<Date>() {
            @Override
            public int compare(Date s1, Date s2) {
                return  s1.compareTo(s2);
            }
        });


        return weekDateList;
    }

    /**加上天数,获取列表*/
    private static List<Date> getAddDateList(int beginIndex, int endIndex, Date date) {
        List<Date> dateList = new ArrayList<>();

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("=====计算加上天数,当前日期:" + dateFormat.format(date));


        if (endIndex > beginIndex) {
            Calendar calendar = Calendar.getInstance();

            for (int i = beginIndex; i <= endIndex; i++) {
                calendar.setTime(date);
                calendar.add(Calendar.DAY_OF_YEAR, i);
                dateList.add(calendar.getTime());
                System.out.println("===加上" + i + "天,的日期:" + dateFormat.format(calendar.getTime()));
            }
        }

        return dateList;
    }

    /**减去天数,获取列表*/
    private static List<Date> getSubtractDateList(int beginIndex, int endIndex, Date date) {
        List<Date> dateList = new ArrayList<>();

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println("=====计算减去天数,当前日期:" + dateFormat.format(date));


        if (endIndex > beginIndex) {
            Calendar calendar = Calendar.getInstance();

            for (int i = endIndex; i >= beginIndex; i--) {
                calendar.setTime(date);
                calendar.add(Calendar.DAY_OF_YEAR, -i);
                dateList.add(calendar.getTime());
                System.out.println("===减去" + i + "天,的日期:" + dateFormat.format(calendar.getTime()));
            }
        }

        return dateList;
    }

8.Calender获取星期几

public static void main(String[] args) throws Exception{
        String dateStr = "2023-8-20";

        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = dateFormat.parse(dateStr);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

        //星期日是第一天,1
        System.out.println("今天是星期:" + calendar.get(Calendar.DAY_OF_WEEK));
    }

7.Calender设置年月日时分秒

public static void main(String[] args) {
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());

        System.out.println("之前");
        System.out.println(dateFormat.format(calendar.getTime()));

        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DATE);


        Calendar resultCalendar = Calendar.getInstance();
        resultCalendar.set(Calendar.YEAR, year);//年
        resultCalendar.set(Calendar.MONTH, month);//月(月份0代表1月)
        resultCalendar.set(Calendar.DATE, day);//日
        resultCalendar.set(Calendar.HOUR_OF_DAY, 23);//时
        resultCalendar.set(Calendar.MINUTE, 59);//分
        resultCalendar.set(Calendar.SECOND, 59);//秒
        System.out.println("之后");
        System.out.println(dateFormat.format(resultCalendar.getTime()));
    }

6.计算两个日期相差的天数

/**
     * 传入两个日期,计算相差的天数
     *
     * return int 相隔的天数, 如2018-01-01  -  2018-01-02  这样计算成两天
     * */
    public static int getBeginTimeToEndTimeDays (Date beginDate, Date endDate) {

        if (beginDate.getTime() > endDate.getTime()) {
            throw new BusinessException("开始时间不能大于结束时间");
        }

        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(beginDate);

        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(endDate);
        int day1= cal1.get(Calendar.DAY_OF_YEAR);
        int day2 = cal2.get(Calendar.DAY_OF_YEAR);

        int year1 = cal1.get(Calendar.YEAR);
        int year2 = cal2.get(Calendar.YEAR);
        if(year1 != year2)
        {
            int timeDistance = 0 ;
            for(int i = year1 ; i < year2 ; i ++)
            {
                if(i%4==0 && i%100!=0 || i%400==0)
                {
                    timeDistance += 366;
                }
                else    //不是闰年
                {
                    timeDistance += 365;
                }
            }

            return timeDistance + (day2-day1) + 1;
        }
        else    //不同年
        {
            System.out.println("判断day2 - day1 : " + (day2-day1));
            return day2-day1+1;
        }
    }

5.返回一个月的日期列表

/**
     * 获取一个月的日期列表
     */
    private List<Date> getMonthDateList (Integer year, Integer month) {
        List<Date> monthDateList = new ArrayList<>();

        //构造本月的开始日期
        Calendar thisMonthFirst = Calendar.getInstance();
        thisMonthFirst.set(year, month-1, 1);

        //构造本月的结束日期
        Calendar thisMonthLast = Calendar.getInstance();
        thisMonthLast.setTime(thisMonthFirst.getTime());
        thisMonthLast.set( Calendar.DAY_OF_MONTH, thisMonthFirst.getActualMaximum(Calendar.DAY_OF_MONTH) );

        int monthBeginInr = thisMonthFirst.get(Calendar.DAY_OF_MONTH);
        int monthEndInr = thisMonthLast.get(Calendar.DAY_OF_MONTH);

        Calendar nowDate = Calendar.getInstance();
        for (int i=monthBeginInr; i<=monthEndInr; i++) {
            nowDate.set(year, month-1, i);
            monthDateList.add(nowDate.getTime());
        }

        return monthDateList;
    }

1.获取两个时间段之间的所有时间

    /**
     * 获取两个时间段之间的所有时间
     *
     * @param beginDate 开始时间
     * @param endDate 结束时间
     *
     * @return dateList
     */
    private static List<Date> getBeginToEndDateList(Date beginDate, Date endDate) {
        List<Date> dateList = new ArrayList<>();

        Calendar beginCalendar = Calendar.getInstance();
        Calendar endCalendar = Calendar.getInstance();
        beginCalendar.setTime(beginDate);
        endCalendar.setTime(endDate);

        //计算两个日期相差的天数
        int aa = DateUtil.getBeginTimeToEndTimeDays(beginDate, endDate);
        for (int i=0; i<aa; i++) {
            dateList.add(beginCalendar.getTime());
            beginCalendar.add(Calendar.DAY_OF_YEAR, 1);
        }

        return dateList;
    }

2.获取两个时间相差的月份数

    /**
     * 判断两个日期相差几个月
     * */
    private static int getBeginToEndDateMonth(Date beginDate, Date endDate) {
        int result;

        Calendar startCalendar = Calendar.getInstance();
        Calendar endCalendar = Calendar.getInstance();
        startCalendar.setTime(beginDate);
        endCalendar.setTime(endDate);

        //判断日期大小
        if(startCalendar.after(endCalendar)){
            Calendar temp = startCalendar;
            startCalendar = endCalendar;
            endCalendar = temp;
        }
        int startYear = startCalendar.get(Calendar.YEAR);
        int endYear = endCalendar.get(Calendar.YEAR);
        int startMonth = startCalendar.get(Calendar.MONTH);
        int endMonth = endCalendar.get(Calendar.MONTH);
        result = (endYear - startYear)*12+(endMonth-startMonth);

        return result;
    }

3.传入一个时间,返回这个月的开始和结束时间

   /**
     * 传入一个时间,返回这个月的开始和结束时间
     * */
    public static Map<String, Date> getThisMonthBeginAndEndDate(Date nowDate) {
        Map<String, Date> dateMap = new HashMap<>(2);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(nowDate);

        //构造本月的开始日期
        Calendar thisMonthFirst = Calendar.getInstance();
        thisMonthFirst.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1);

        //构造本月的结束日期
        Calendar thisMonthLast = Calendar.getInstance();
        thisMonthLast.setTime(thisMonthFirst.getTime());
        thisMonthLast.set( Calendar.DAY_OF_MONTH, thisMonthFirst.getActualMaximum(Calendar.DAY_OF_MONTH) );

        dateMap.put("beginDate", thisMonthFirst.getTime());
        dateMap.put("endDate", thisMonthLast.getTime());

        return dateMap;
    }

4.使用Calendar月份加1

public static void main(String[] args) throws Exception{
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String dateToString = "2019-11-2";
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(dateFormat.parse(dateToString));


        for (int i=0; i<30; i++) {
            calendar.add(Calendar.MONTH, +1);
            System.out.println("=========>当前时间: " + dateFormat.format(calendar.getTime()));
        }

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值