把日期按照天输出
来源:互联网 发布:大数据培训学校 编辑:程序博客网 时间:2024/05/17 04:22
package zjt.xl;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;public class HindenVehicleVoTest{public static void main(String[] args) {getListPicture();}public static void getListPicture(){//查询出所有记录List<Date> dates = new ArrayList<Date>();//数据源List<String> ls = new ArrayList<String>();ls.add("2014-01-21 19:00:00");//ls.add("2014-01-21 19:42:40");//ls.add("2014-01-21 21:16:59");//ls.add("2014-01-22 06:10:11");//ls.add("2014-01-22 07:37:45");//ls.add("2014-01-22 09:15:13");//ls.add("2014-01-22 11:06:23");//ls.add("2014-01-22 16:59:31");//ls.add("2014-01-22 19:25:18");//ls.add("2014-01-22 21:14:00");//ls.add("2014-01-23 06:18:42");//ls.add("2014-01-23 07:48:10");//ls.add("2014-01-23 09:25:59");//ls.add("2014-01-23 17:49:10");//ls.add("2014-01-23 19:55:28");//ls.add("2014-01-23 22:20:49");//ls.add("2014-01-24 06:05:17");//ls.add("2014-01-25 07:35:04");//ls.add("2014-01-24 09:14:56");//ls.add("2014-01-24 11:06:20");//ls.add("2014-01-27 14:06:20");//ls.add("2014-01-27 17:06:20");for (String dateStr : ls) {dates.add(getDateByStr(dateStr));}Calendar calendar1 = Calendar.getInstance();calendar1.set(2014,0,24,18,12,50); //月份要减一,才是正常月份Date date = calendar1.getTime();Integer dayNum = 3;Date preDate = getNextNDay(date, -dayNum); //取得开始时间Date aftDate = getNextNDay(date, dayNum); //取得结束时间Date queryDate = null;//封装时间段序列List<Date> dateList = new ArrayList<Date>();dateList.add(preDate);for (int i = 1; i < (dayNum * 2) + 1; i++) {queryDate = getNextNDay(preDate, i);dateList.add(singleDate(queryDate)); //截断点时间只保留日期时间格式}dateList.add(aftDate);for (Date date2 : dates) {System.out.println("date:" + getAllDate(date2));}System.out.println("****************************************");//封装查询数据Map<String,Long> map = new LinkedHashMap<String,Long>();if(dates.isEmpty() || dates.size() == 0){/** * 走默认流程,给每个点时间上都赋值默认值 */for (int i = 0;i<dateList.size()-1;i++) {map.put(getAllDate(dateList.get(i)), 0L);}return;}Long count = 0L;String key = null;int j = 0;/** * 处理前段时间没有值的情况 */Boolean flagx = isTimeInPeriod(dateList.get(0),dateList.get(1),dates.get(0));if(!flagx){key = getAllDate(dateList.get(0));map.put(key, count); //在存入}for (int i = 0;i<dates.size();i++) { //外层循环Boolean flag = isTimeInPeriod(dateList.get(j),dateList.get(j+1),dates.get(i)); //进行比较操作,看是否在区间内/** * 在这个区域中 */if(flag){ //在区间内 计数加一if(key !=null){ //key存入的是最小值count = map.get(key) + 1;//取出来加和map.put(key, count); //在存入}else{key = getAllDate(dateList.get(j));count++;map.put(key, count);}}else{/** * 不在这个区域内 */// 大于最大时间,就是大于dateList.get(j+1)了// 判断是否超过日期段最大值(边界: < size-1 ----因为j+1)// j+1 计数加一if(j+1 < dateList.size()-1){//这里j+1 == dateList.size()长度-1//if(i==0){ //当第一次进入的时候,最小点的区间没值,那么就记录最小时间点////}i--;count = 0L;key = getAllDate(dateList.get(j+1)); //新的时间段标识,还要处理,前几个时间段没值,中间的时间端没值,该怎么记录map.put(key, count);j++;//走到下一个时间段}}}/** * 处理后面的时间端没有值的情况 */for(;j+1 <dateList.size()-1;){map.put(getAllDate(dateList.get(j+1)), 0L);j++;}for(Map.Entry<String, Long> mapx : map.entrySet()){System.out.println(mapx.getKey() + " \t " + mapx.getValue());}}private static Date singleDate(Date queryDate) {Calendar calender = new GregorianCalendar();calender.setTime(queryDate);calender.set(Calendar.HOUR_OF_DAY, 0);calender.set(Calendar.MINUTE, 0);calender.set(Calendar.SECOND, 0);calender.set(Calendar.MILLISECOND, 0);return calender.getTime();}private static String getAllDate(Date preDate) {return dateFormat(preDate);}private static Date getNextNDay(Date date, int i) {Calendar calendar = new GregorianCalendar();calendar.setTime(date);calendar.add(Calendar.DAY_OF_MONTH, i);return calendar.getTime();}private static Boolean isTimeInPeriod(Date date, Date date2, Date date3) {Boolean flaghead = date.before(date3);Boolean flagtail = date2.after(date3);return flaghead && flagtail ;}public static String dateFormat(Date date){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.format(date);}public static Date getDateByStr(String dateStr){if(dateStr!=null && !"".equals(dateStr)){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {return sdf.parse(dateStr);} catch (ParseException e) {e.printStackTrace();}}return null;}}
要求按照天输出,统计
19次
2014-01-21 19:42:40
2014-01-21 21:16:59
2014-01-22 06:10:11
2014-01-22 07:37:45
2014-01-22 09:15:13
2014-01-22 11:06:23
2014-01-22 16:59:31
2014-01-22 19:25:18
2014-01-22 21:14:00
2014-01-23 06:18:42
2014-01-23 07:48:10
2014-01-23 09:25:59
2014-01-23 17:49:10
2014-01-23 19:55:28
2014-01-23 22:20:49
2014-01-24 06:05:17
2014-01-24 07:35:04
2014-01-24 09:14:56
2014-01-24 11:06:20
结构:
2014-01-21 19:42:40 2
2014-01-22 7
2014-01-23 6
2014-01-24 4
2014-01-25 0
2014-01-26 0
2014-01-27 0
0 0
- 把日期按照天输出
- 修改Zookeeper日志输出路径,并按照日期输出
- 修改Zookeeper日志输出路径,并按照日期输出
- log4j 按照日期和输出类型分割日志文件
- 怎样把数据库的日期时间只输出日期
- 将指定日期所在月份的所有日期按照周次输出
- 怎么把有一段时间的表按照每天左连到一个日期表上
- putchar 实现把整形数按照radix进制的数输出
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法
- 输入一个整数,把该整数分别按照八进制、十进制、十六进制形式输出
- 输入一个整数,把该整数分别按照八进制、十进制、十六进制形式输出
- 输入一个整数,把该整数分别按照八进制、十进制、十六进制形式输出
- 完成按照日期排列
- SQLite 按照日期分组
- Linux - 将Crontab中的命令输出按照当前日期进行存储
- 用CDate类成员函数实现对用户按照年月日格式输入的日期加一天后按照年/月/日格式输出
- 算法 把一个字符串数组 按照从中间开始然后左侧一个右侧一个的方式输出
- hdu 2072
- Spring-test做数据库操作的单元测试
- python3.2的bytes和str数据拼接
- 如何给shell脚本传入参数小结
- Winform之学生信息管理系统主页面
- 把日期按照天输出
- HDU1434 幸福列车 【优先队列】
- Git放弃本地更改恢复到资源库版本
- ANDROID SDK体系介绍
- ORACLE9i_性能调优基础十三(Materialized Views)
- 【技巧】android中ListView拉黑解决方法
- 【AJAX好学易用系列】之二:XMLHttpRequst对象
- hdu 1072(倒计时bfs)
- 二叉树的递归遍历