计算经过时间范围

原创 2016年08月29日 09:51:14

由于公司业务变更,计算夜间服务费晚上23点–早上5点为夜间服务费时间,按分钟收费,考虑各种情况最后想出简单计算规则

这里写代码片
    /**
     * 分钟计算单位
     */
    private static final int MINTUS_TIME_UNIT=60000;
    /**
     * 天计算单位
     */
    private static final int DAY_TIME_UNIT=24*3600000;
    /**
     * 计算夜间服务时长
     * @param startTime
     * @param timeLenght
     * @return
     */
    public static int getNightServiceTimeLong(Date startTime,long timeLong){
        return getNightServiceTimeLong(startTime,new Date(startTime.getTime()+timeLong));
    }

    /**
     * 计算夜间服务时长(返回单位分钟)
     * @param startTime开始时间
     * @param endTime 结束时间
     * @return
     */
    public static int getNightServiceTimeLong(Date startTime, Date endTime){
        long startLong=getDateTimetoLong(startTime);
        long endLong=getDateTimetoLong(endTime);
        DateTime startDate=new DateTime(startTime).withTime(5,0,0, 0);
        DateTime start=new DateTime(startTime).withTime(23,0,0, 0);
        DateTime end=new DateTime(endTime).withTime(5,0,0, 0);
        DateTime endDate=new DateTime(endTime).withTime(23,0,0, 0);

        long startMillis=start.getMillis();
        long endMillis=end.getMillis();

        int sumMinus=calDayDiffer(startMillis,endDate.getMillis())*360;

        int startDiffer=calMintusDiffer(startMillis,startLong);
        if(startDiffer>0){
            sumMinus-=startDiffer;
        }
        int endDiffer=calMintusDiffer(endMillis,endLong);
        if(endDiffer<0){
            sumMinus+=endDiffer;
        }
        int endMany=calMintusDiffer(endDate.getMillis(),endLong);
        if(endMany>0){
            sumMinus+=endMany;
        }
        int startMany=calMintusDiffer(startLong,Math.min(startDate.getMillis(),endLong));
        if(startMany>0&&startMany<300){
            sumMinus+=startMany;
        }
        return sumMinus;
    }
    private static long getDateTimetoLong(Date date){
        return new DateTime(date).withSecondOfMinute(0).withMillisOfSecond(0).getMillis();
    }
    private static int calDayDiffer(long start,long end){
        return (int)((end-start)/DAY_TIME_UNIT);
    }
    /**
     * 计算时差 返回单位分钟
     * @param start
     * @param end
     * @return
     */
    private static int calMintusDiffer(long start,long end){
        return (int)((end-start)/MINTUS_TIME_UNIT);
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

同一时间范围内并发数统计

酒店系统的相关问题:统计每天在同一时间段内服务房间最多的服务生。 分析:当一个房间的服务开始之后,只要第2个房间的服务开始时间小于(早于)或者等于第1个房间的开始时间,并且结束时间大于(晚于)第1...

My97DatePicker:开始时间和结束时间的最大间隔为10天,并且不大于当前时间

My97DatePicker是一款很好用的日期插件,有很强的扩展性,可以随意的限制最大值和最小值,还可以调用自定义方法(通过ajax方式来获取服务器的时间)来限制日期插件的最大值。最近项目里用到一个功...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

范围统计

//旨在明白求上界和下界的原理的情况下,熟悉STL算法中的lower_bound和upper_bound函数的用法 #include #include using namespace std; co...

多边形范围点判定算法

判断一个二维坐标点是否在一个多边形范围框内,首先给出范围框各顶点的坐标(按顺时针方向给出),分别放到两个数组中再比较大小范围从而判定点是否在多边形返回框中  code如下:public class R...

Oracle日期时间范围查询

/* 日期时间范围查询 */ ---------- 创建日期时间测试表----------------------------------------------------------- ...

bootstrap-datepicker限定可选时间范围

一、应用场景 实际应用中可能会根据日期字段查询某个日期范围内的数据,则需要对日期选择器可选时间进行限制, 如:开始时间不能大于结束时间,结束时间不能小于开始时间,此时就要为开始日期选择器和结束日期选...

Easyui Datebox设置可选时间范围

修改easyUI源码,实现datebox日期范围限制的功能

Oracle的日期时间范围查询

Oracle日期时间范围查询   Sql代码   /* 日期时间范围查询 */      ---------- 创建日期时间测试表--------------------...

bootstrap-datepicker限定可选时间范围

一、应用场景 实际应用中可能会根据日期字段查询某个日期范围内的数据,则需要对日期选择器可选时间进行限制, 如:开始时间不能大于结束时间,结束时间不能小于开始时间,此时就要为开始日期选择器和结束...

extjs 时间范围选择的实现

extjs中 有时需要选择一个日期范围 ,需要自动判断,选择的开始日期不能大于结束日期,或结束日期不能小于开始日期,实现的代码如下:效果图:从上图可以看到,当选择了一个开始时间后,会自动限制结束时间的...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)