获得最近30天中每两天一个时间段
Posted nihao小树苗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获得最近30天中每两天一个时间段相关的知识,希望对你有一定的参考价值。
需求解析:
获得最近30天中的每两天一个时间段,由此得出30天中两天一个段共有15个时间段,一般用于数据统计中坐标为日的刻度
即如图:每个刻度就是一个时间段,
如:11刻度为:"2018-08-10 00:00:00":"2018-08-11 23:59:59"
13刻度为:"2018-08-12 00:00:00":"2018-08-13 23:59:59"
...
8刻度为9月:"2018-09-07 00:00:00":"2018-09-08 17:04:20"
代码如下:
public static String[] getDayOfTheMonth(){ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String[] dateStr = new String[15];//设置数组大小为15 Calendar cal = Calendar.getInstance(); int day = cal.get(Calendar.DAY_OF_MONTH);//得到当前天 Map<String, Object> params = Maps.newHashMap();//定义Map存放起始时间key和结束时间value //起始时间 String startTime = ""; //结束时间 String endTime = ""; //获取当前时间为最后一个坐标点的结束时间 endTime = formatter.format(cal.getTime()); for (int i = 15; i > 0; i--) { params.clear(); int year = cal.get(Calendar.YEAR);//循环内获得当前年--因为在具体处理中会改变年、月、日故在循环内获得改变后的年、月、日 int month = cal.get(Calendar.MONTH);//循环内获得当前月 int today = cal.get(Calendar.DAY_OF_MONTH);//循环内获得当前天 //如果当前天是2号--第一次进入循环 if (day == 2) { cal.set(year, month, day-1, 0, 0, 0);//天数减1 startTime = formatter.format(cal.getTime());//得到减1后的时间--即:yyyy-MM-01 00:00:00 params.put(startTime, endTime); day = 0; } else if (day == 1) {//如果当前天是1号--第一次进入循环 cal.add(Calendar.DATE, -1);//天数减1得到上个月的最后一天,如当前月为9月1号,那么设置后为8月31号 cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);//设置时间 startTime = formatter.format(cal.getTime());//得到起始时间 params.put(startTime, endTime); day = 0; } else if (today == 1) {//非第一次进入循环 cal.add(Calendar.DATE, -1); cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 23, 59, 59); endTime = formatter.format(cal.getTime()); cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)-1, 0, 0, 0); startTime = formatter.format(cal.getTime()); params.put(startTime, endTime); } else if (today == 2) { cal.set(year, month, today-1, 23, 59, 59); endTime = formatter.format(cal.getTime()); cal.add(Calendar.DATE, -1); cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0); startTime = formatter.format(cal.getTime()); params.put(startTime, endTime); }else { if (i != 15) {//第一次进入循环且当前日期不为1号和2号,不需要设置结束时间,循环外已经设置 cal.set(year, month, today-1, 23, 59, 59); endTime = formatter.format(cal.getTime()); } cal.set(year, month, cal.get(Calendar.DAY_OF_MONTH)-1, 0, 0, 0); startTime = formatter.format(cal.getTime()); params.put(startTime, endTime); } String dates = JSON.toJSONString(params); dateStr[i-1] = dates; } return dateStr; }
调用方法:
public static void main(String[] args) { String[] strs = getDayOfTheMonth(); for (String str : strs) { Map<String, Object> params = JSON.parseObject(str); System.err.println(params); } }
结果为:
注:上面做法可以获得最近30天每两天的时间段,但每天坐标轴的刻度都会变化
以上是关于获得最近30天中每两天一个时间段的主要内容,如果未能解决你的问题,请参考以下文章
UILocalNotification如何将repeatInterval设置为每两天?