java实现一定规则下的时间段或单元数统计
来源:互联网 发布:淘宝商城情趣用品 编辑:程序博客网 时间:2024/05/16 07:26
时间单元内单元数统计:
前期统计根据一定规则来统计,目前规则是8点12点算一个单位,12点到次日8点算一个单位。和时间段内时间长短无关。只看设备借出到归还之间,落在几个单位区间内。
比如一个摄像机,例1:上午8点借出,当天中午12点前归还。就计1个单位;
例2:上午8点借出,当天13点归还,计2个单位(8-12;12-13)
例3:上午7点借出,当天13点归还,计3个单位(7-8;8-12;12-13)
例4:上午8点借出,第二天9点收回,计3个单位(上午8-12;下午12到第二天8;第二天8到9 各算一个)。
这个规则的时间切点,允许用户后台定义,以备未来规则修改。
比如目前是8点开始算,可能未来会变成9点,12点会变成14点。
解决方案:
/** * 以0-48为基础统计单元 * @author 张恩备 * @param a 条件数组 * @param unit 统计单元,a.lengh()-2 * @param x 开始时间int型 * @param y 结束时间int型 * @date 2016-8-24 上午11:16:50 */public static Integer count1(int[] a,int unit,int x,int y){int n=0; for(int i=0;i<=unit;i++){ if(a[i+1] > x && x>=a[i]){ for(int j=0;j<=unit;j++){ if(a[j+1] > y && y>=a[j]){ n+=unit-i+j+1; System.out.println("--i:"+i+"--"+"j:"+j); } } } } return n;}/** * 统计时分秒一天0-24内的单元数 * @author 张恩备 * @param a 条件数组 * @param unit 统计单元,a.lengh()-2 * @param x 开始时间int型 * @param y 结束时间int型 * @date 2016-8-24 上午11:16:50 */public static Integer count(int[] a,int unit,int x,int y){int n=0;for(int i=0;i<=unit;i++){if(a[i+1] > x && x>=a[i]){for(int j=0;j<=unit;j++){if(a[j+1] > y && y>=a[j]){n+=2-i+j-1;System.out.println("--i:"+i+"--"+"j:"+j);}}}}return n;}public static void main(String[] args) {int[] a = new int[]{000000,80000,120000,240000};int unit=a.length-2;String start = "20160824080000";String end = "20160825090000";int startDate = Integer.parseInt(start.substring(0, 8));int startTime = Integer.parseInt(start.substring(8,14));int endDate = Integer.parseInt(end.substring(0,8));int endTime = Integer.parseInt(end.substring(8,14));System.out.println("--startDate--"+startDate+"--endDate--"+endDate);System.out.println("--startTime--"+startTime+"--endTime--"+endTime);int m = endDate-startDate; int n = count(a,unit,startTime,endTime); System.out.println("--一天:"+n+"单元"); System.out.println("--一共:"+(m*unit+n)+"单元"); }
时间段内时长统计:
演播室使用统计中加班时段为每天的00:00-8:00,12:00-14:30,18:00-24:00,以及周末节假日全天。
如果任务单时间属于加班时间内,需要统计出加班时间。统计中正常使用时间和加班时间要分别统计。
比如一个节目单使用时间为7:00到9:00,则加班时间计1小时,正常时间计1小时
解决方案:
public static void main(String args[]){//开始、结束int start = 0;int end = 540;List<Integer> usetimeFinal = timehandler(start, end);List<Integer> usetime = new ArrayList<Integer>();//加班时间段--真实环境start-end为一组int[] overtimeStart =new int[]{0,480,1080};int[] overtimeEnd = new int[]{60,540,1140};//overtimeDTO otd = new overtimeDTO();//List<overtimeDTO> list = new ArrayList<overtimeDTO>();int unit=overtimeStart.length;int n = 0;for(int i=0;i<unit;i++){List<Integer> usetimeTemp = new ArrayList<Integer>();usetimeTemp.addAll(usetimeFinal);//List<Integer> overtime = timehandler(list.get(i).getStart(), list.get(i).getEnd());List<Integer> overtime = timehandler(overtimeStart[i],overtimeEnd[i]);usetimeTemp.retainAll(overtime);if(usetimeTemp.size() != 0){n++;//结合四分五裂原理,避免组合数组中间拼接产生的时间段usetime.addAll(usetimeTemp);}}int overtime = usetime.size() - n;usetimeFinal.removeAll(usetime);int normaltime = usetimeFinal.size() -1 + n;//去除0点System.out.println("加班时间:" + overtime * 15 + " , 正常时间:" + normaltime * 15);}/** * 时间以指定15分钟分割 * @author 张恩备 * @date 2016-8-25 下午02:26:58 */public static List<Integer> timehandler(int start,int end){List<Integer> point = new ArrayList<Integer>();for(int i = start / 15; i <= end / 15; i++){point.add(i);}return point;}
0 0
- java实现一定规则下的时间段或单元数统计
- 关于在正则表达式中实现为空或满足一定规则的写法
- java实现输入一个时间段,以及相应的星期数,获得这个时间段中这些星期的日期
- Java生成一定范围内的浮点数
- Java统计两个日期时间段每个月对应的天数
- javabean+Jsp统计网站时间段访问数
- 任意时间段量的统计
- java生成具有一定规则的唯一字符串
- 统计指定目录下Java源代码的总行数
- Hibernate中使用Hql查询出一定时间段的记录
- Oracle函数 通过秒数或分钟数获取时间段
- android TimeUnit表示给定单元颗粒度的时间段
- 统计一个单元区里的二进制数中1的个数
- 关于对数据库统计每个时间段内的数据的实现方式
- 锋利的SQL:时间段天数统计
- 统计某一时间段内的数据
- 根据时间段,返回时间段的工作小时数
- Java中this分类以及在各分类下的用法或规则
- 解决Sybase库显示中文乱码问题
- 完全自定义控件-简单环形进度条制作
- js ==与===区别(两个等号与三个等号)
- 解决服务器UDP数据包丢失问题
- java泛型要点
- java实现一定规则下的时间段或单元数统计
- 编辑文本框_FrameUtil.java
- 比特币中文维基
- Linux shell重定向
- 给定两个排序后的表,用C++求其交集和并集
- SniperEliteV2没有声音的解决办法
- jni环境搭建测试实例
- 双目视觉SLAM讲解1
- ActiveMQ入门实例