自我救赎之路--Java(数据处理)
来源:互联网 发布:淘宝店铺商品被删除 编辑:程序博客网 时间:2024/05/18 03:31
对数据的简单处理
最近做了一个项目,把execl中的数据导入到数据,进行分析制造数据,其实大家并不关心是什么样的数据,要什么样的数据,就跟你们一样,我只关心技术点和要实现的功能。Come on,还是来说说技术点吧!
execl数据导入到数据库
- 对于execl 导入数据,这个前面的文章有介绍过,如果不熟悉的请点
http://blog.csdn.net/ccwm0129/article/details/76093812
- 对于execl 导入数据,这个前面的文章有介绍过,如果不熟悉的请点
导入到数据库之后对数据进行处理
替换数据库中某个字段的前缀
update tableName set filed1="replace"(filed1,'NX.','Tag.') where filed2 like'NX.%
把一个表中的字段替换成另一表中的字段 前提是table1和table2 中有一个字段是相等的值 如filed3=filed4
update table1 set filed1= (select filed2 from table2 where filed3=filed4 )
一个表中把一个具体到时间段的字段值赋给另一个字段,但是时间要求控制到日期就可以了
update table set filed1= date_trunc('day',filed2)
数据库中的数据整理好之后,来用编程处理数据
- 主要是都日期的操作
/** * Created by chenwangming on 2017/8/22. */public class DifferentDate { /** * date2比date1多的天数 * @param date1 * @param date2 * @return */ public static int differentDays(Date date1, Date date2) { Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); Calendar cal2 = Calendar.getInstance(); cal2.setTime(date2); int day1= cal1.get(Calendar.DAY_OF_YEAR); int day2 = cal2.get(Calendar.DAY_OF_YEAR); int year1 = cal1.get(Calendar.YEAR); int year2 = cal2.get(Calendar.YEAR); if(year1 != year2) //同一年 { int timeDistance = 0 ; for(int i = year1 ; i < year2 ; i ++) { if(i%4==0 && i%100!=0 || i%400==0) //闰年 { timeDistance += 366; } else //不是闰年 { timeDistance += 365; } } return timeDistance + (day2-day1) ; } else //不同年 { System.out.println("判断day2 - day1 : " + (day2-day1)); return day2-day1; } } /** * 通过时间秒毫秒数判断两个时间的间隔 * @param date1 * @param date2 * @return */ public static int differentDaysByMillisecond(Date date1,Date date2) { int days = (int) ((date2.getTime() - date1.getTime()) / (1000*3600*24)); return days; } /** * 日期加一天 * @param date * @return */ public static Date addonedate(Date date,int day) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.DAY_OF_MONTH, day);// 今天+1天 Date tomorrow = c.getTime(); return tomorrow; } /** * 日期加一小时 * @param date * @param time * @return */ public static Date addonetime(Date date,int time) { Calendar ca=Calendar.getInstance(); ca.setTime(date); ca.add(Calendar.HOUR_OF_DAY, time); return ca.getTime(); } /** * 日期加一天 * @param date * @return */ public static Date addonedateByMillisecond(Date date) { long time=date.getTime()+24*3600*1000; try { Date d = new Date(time); return d; } catch(Exception ex) { return new Date(); } } //比较日期大小算出秒数 public static long getmillisecond(Date date1,Date date2) { long millisecond=0; if(date1.getTime()>date2.getTime()) { millisecond= (date1.getTime()-date2.getTime())/1000; }else { millisecond= (date2.getTime()-date1.getTime())/1000; } return millisecond; } // 自造24小时制 public static List<Date> time24hours(Date time) throws ParseException { List<Date> datetime=new ArrayList<Date>(); //region old// for(int i=0;i<24;i++)// {// String hh="";// if(i<10)// {// hh="0"+i;// }else// {// hh=String.valueOf(i);// }// String pattan="yyyy-MM-dd "+hh+":00:00";// SimpleDateFormat sdf = new SimpleDateFormat(pattan);// String dtime=sdf.format(time);// ParsePosition pos=new ParsePosition(0);// Date timeone= sdf.parse(dtime,pos);//// datetime.add(timeone);// } //endregion String pattan="yyyy-MM-dd 00:00:00"; SimpleDateFormat sdf = new SimpleDateFormat(pattan); ParsePosition pos=new ParsePosition(0); Date timeone= sdf.parse(sdf.format(time),pos); //region new for(int i=0;i<24;i++) { datetime.add(addonetime(timeone,i)); } //endregion return datetime; } //把开始日期到结束日期放在List<Date>集合中 public static List<Date> getListDate(Date start,Date end) throws ParseException { String pattan="yyyy-MM-dd 00:00:00"; SimpleDateFormat sdf = new SimpleDateFormat(pattan); Date starttime= sdf.parse(sdf.format(start)); int days= differentDays(start,end); List<Date> listDay=new ArrayList<Date>(); //listDay.add(starttime); for(int i=0;i<=days;i++) { Date dateadd=addonedate(starttime,i); listDay.add(dateadd); } return listDay; } //获取数组最小数据的索引 public static int getMin(long[] arr) { long mix = arr[0]; int index=0; for (int i = 0; i < arr.length; i++) { if(arr[i] < mix){ mix = arr[i]; } } for(int j=0;j<arr.length;j++) { if(arr[j]==mix) { index=j; break; } } //int index= Arrays.binarySearch(arr,mix); 有问题 return index; } //一个日期集合和一个日期对比最, 取出最小的日期 public static Date getmixcompore(List<Date> datelist,Date date) { long[] arr=new long[datelist.size()]; for(int i=0;i<datelist.size();i++) { long length= getmillisecond(datelist.get(i),date); arr[i]=length; } int index= getMin(arr); return datelist.get(index); }
对了,以上我用的数据库是postgreSql,这些就是我对数据的处理,其中用到一个取出数组中最小元素的索引,我用了两个for循环, Arrays.binarySearch(arr,mix);这个反法有问题,取的不准确。我知道性能不好,可是,没有想到合适的方法,等待后期的优化。
经历过黑暗,才有对光明的渴望;经历过风雨,才懂得阳光的温暖;经历过沧桑,才拥有温柔的内心;经历人生最好的成长。
共同学习,共同进步,技术交流群:210470210
- 自我救赎之路--Java(数据处理)
- 自我救赎之路--java(jar包导入)
- 自我救赎之路--Java(图片处理)
- 自我救赎之路--Java(Intellij IDEA)
- 自我救赎之路—Java(HttpClient请求)
- 自我救赎之路—(生成图标随机数)
- 自我救赎之路—(springboot 配置多种数据源)
- 一位大学生的自我救赎之路
- Java对象自我救赎机制
- 自我救赎
- 自己救赎之路--Java(Execl导入)
- 自我营销与自我救赎
- 微软的自我救赎
- 中国企业家的自我救赎
- 自我的救赎
- 技术人员的自我救赎
- C程序设计入门级(一个菜鸟的自我救赎)
- Web2.0面临自我救赎
- 自定义View之onMeasure()方法
- 解决com.mysql.jdbc.PacketTooBigException: Packet for query is too large (3158064)问题
- VS2015编译Openssl-1.1.0f
- CRB and Candies (组合的LCM)
- 仿微信式,平滑输入面板,防止键盘的出现与消失导致特殊输入面板的顶起与塌陷。
- 自我救赎之路--Java(数据处理)
- 在linux CentOS 上安装chrome 谷歌浏览器
- 仪表盘
- PHP微信支付开发实例
- 浅析Java RTTI 和 反射的概念
- jquery
- static的在内存中的存放位置
- 文本超出容器样式
- 用ajax调用mpdf在微信端生成pdf保存到服务器,并打开。