获取时间间隔内每个时间点对应的时间

测试:

按1分钟分割

@Test
    public void myTest(){
        //按1分钟分割
        //注意:当开始时间为00:00:00时,截止时间不能写为00:59:59(当开始时间累加到00:59:00时,依然小于截止时间,继续加一分钟变成00:00:00,进入死循环)
        Map<String,String> map = getQueryTime("00:00:00", "00:59:00", "HH:mm:ss", Calendar.MINUTE, 1);
        System.out.println(map);
    }

结果:

按一天分割

@Test
    public void myTest(){
        //按1天分割
        Map<String,String> map = getQueryTime("2021-05-01", "2021-05-18", "yyyy-MM-dd", Calendar.DAY_OF_MONTH, 1);
        System.out.println(map);
    }

结果:

逻辑代码:

/**
     * 循环条件为开始时间小于截止时间,若满足条件,开始时间就加上时间间隔
     * @param startTime 开始时间
     * @param endTime  截止时间
     * @param format   返回数据的时间格式
     * @param unit  按分钟、天划分(Calendar.MINUTE,Calendar.DAY_OF_MONTH,..........)
     * @param interval 时间间隔(1,2,3,......)
     * @return
     */
    public Map<String,String> getQueryTime(String startTime, String endTime, String format, int unit, int interval){
        LinkedHashMap<String,String> timeMap = Maps.newLinkedHashMap();
        try {
            while (startTime.compareTo(endTime)<0){
                timeMap.put(startTime,startTime);
                startTime = getDateTimeByInterval(startTime,interval,unit,format);
            }
            timeMap.put(startTime,startTime);
        } catch (Exception e) {
            e.getMessage();
        }
        return timeMap;
    }

    private String getDateTimeByInterval(String readingTime,int interval,int unit,String format){
        Calendar calendar = Calendar.getInstance();
        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat(format);
            Date date = dateFormat.parse(readingTime);
            calendar.setTime(date);
            calendar.add(unit, interval);
        }
        catch (ParseException e) {
            e.printStackTrace();
        }
        return new SimpleDateFormat(format).format(calendar.getTime());
    }

 

posted @ 2021-05-19 11:37  一只黄焖鸡  阅读(126)  评论(0)    收藏  举报