日常白痴_Date的比较及增减操作

背景提要

一直以来,获取日期都是用new Date(),再不然,顶多用个SimpleDateFormat规范一下格式
忽然遇到需求,需要对日期增加和比较大小的时候,就又懵住了,唉,每天都为自己太白目感到心累

主要就是用Calendar类进行操作

获取当前时间的年月日

       Calendar current = Calendar.getInstance();
        Integer curYear = current.get(Calendar.YEAR);
        Integer curMonth = current.get(Calendar.MONTH) + 1;
        Integer curDay = current.get(Calendar.DAY_OF_MONTH);

这里需要注意的就是月份是从0开始计算的,所以需要获得实际的月份的话,需要加1操作

日期增减

    private String handleEndTime(String endTime) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String endTimeStr = "";
        try {
            Date end = sdf.parse(endTime);
            Calendar endCal = new GregorianCalendar();
            endCal.setTime(end);
            endCal.add(Calendar.DATE, 1);
            endTimeStr = sdf.format(endCal.getTime());
        } catch (ParseException e) {
            e.printStackTrace();
            log.error("时间转换错误,请检查时间格式");
        }
        return endTimeStr;
    }

如果需要增加月份的话,就把endCal.add(Calendar.DATE, 1);换成endCal.add(Calendar.MONTH, 1);就可以了

日期比较

如果需要在一个startTime-endTime中循环所有的天或者月的话,就需要同时用到日期比较和日期增加了
>=和<=对于Date类型都是失效的,实际需要用到compareTo函数和equals函数
compareTo返回-1,说明小于,返回1,说明大于,返回0,说明等于
举个栗子:

            sdf = new SimpleDateFormat("yyyy-MM");
            Calendar cd = Calendar.getInstance();
            //Calendar中放入时间startTime startTime是String类型,endTime也是String类型
            cd.setTime(sdf.parse(startTime));
            while (cd.getTime().compareTo(sdf.parse(endTime)) == -1 || cd.getTime().equals(sdf.parse(endTime))) {
                //增加一个月,类比for循环中i++这种操作
                cd.add(Calendar.MONTH, 1);
            }

白目的一天呐,祝你快乐!

posted @ 2022-06-24 19:37  Dean_001  阅读(79)  评论(0)    收藏  举报