获得当月已过的偶数天时间段

需求解析:

获得当月已过的偶数天时间段,由此得出30天中两天一个段共有15个时间段,一般用于数据统计中坐标为日的刻度

即如图:每个刻度就是一个时间段

  2刻度为:"2018-08-01 00:00:00":"2018-08-02 23:59:59"

  4刻度为:"2018-08-03 00:00:00":"2018-08-04 23:59:59"

  ...

  今日是2018-09-10则代码运行后结果为2、4、6、8这几个点的时间段,10号这个点需要等10号过完才会有,以此类推

代码如下:

  public static Map<String, Object> getDayOfTheMonth(Calendar calendar){
        
        Map<String, Object> params = Maps.newHashMap();
        Map<String, Object> map = Maps.newHashMap();
        //获取年、月、日
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DATE);
        //起始时间
        String startTime = "";
        //结束时间
        String endTime = "";
        
        //排除当月1号
        if ((day/2) > 0) {
            
            for (int i = 2; i <= day; i++) {
                params.clear();
                if ((i%2) != 0) {
                    continue;
                }
                //开始时间
                calendar.set(year, month, i-1, 0, 0, 0);
                startTime = formatDateToString(calendar.getTime());
                //结束时间
                calendar.set(year, month, i, 23, 59, 59);
                endTime = formatDateToString(calendar.getTime());
                params.put(startTime, endTime);
                String date = JSON.toJSONString(params);
                map.put(Integer.toString(i), date);//key为刻度天,value为起始和结束时间的JSON串
            }
        } else {
            return null;
        }
        return map;
    }

调用方法:

  public static void main(String[] args) {
        Map<String, Object> params = DateUtil.getDayOfTheMonth(Calendar.getInstance());
        for (Map.Entry<String, Object> key : params.entrySet()) {
            System.out.println(key.getValue());
        }
    }

运行结果:

猜你喜欢

转载自www.cnblogs.com/seedling/p/9620472.html