获得当月已过的偶数天时间段
需求解析:
获得当月已过的偶数天时间段,由此得出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()); } }
运行结果: