计算经过时间范围

原创 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);
    }

unity 计算时间的插差值

图片上的定义  需要开始计时的   就写的上stopwatch.Start ();   是打开计算时间的函数方法  当都需要关闭之时stopwatch.Stop (); 调取这个即可  就会停止计时 ...
  • huhudeni
  • huhudeni
  • 2017年08月08日 13:14
  • 245

c/c++日期时间的计算程序

Listing 1 time1.c - 采用不同格式输出当前的日期和时间 #include #include #define BUFSIZE 128 main() { time_t t...
  • peterli_xue
  • peterli_xue
  • 2012年03月14日 21:41
  • 570

unity 关于计算时间的差值 时间戳

博主在做游戏的过程中,需要做一个时间差值的提示   在网上找打了 方法 自己进从了 整理    如下 using System.Collections; using System.Collecti...
  • huhudeni
  • huhudeni
  • 2017年08月08日 16:50
  • 428

用C实现计算时间间隔的方法

#include /*时间间隔,win32下为毫秒,DOS下为1/18秒(有点低)*/ long GetTickCount() { long ret; ret=peek(0x0,0x46e)...
  • lujianfeiccie2009
  • lujianfeiccie2009
  • 2012年01月21日 18:19
  • 1895

sql 时间范围查询条件

--一年内注册查询 select * from User where datediff(year,Createdate,getdate())=0 --一月内注册查询 select * from ...
  • xinyanan1992
  • xinyanan1992
  • 2016年05月16日 16:42
  • 924

Unity计算速率的简单方法

//记录速率上一个向量 Vector3 LastPos = Vector3.zero; //速率 Vector3 velocity = Vector3.zero; float Timer=...
  • f1017641044
  • f1017641044
  • 2017年09月07日 11:23
  • 260

SQL时间范围语句(包含日期段和时间段)

select * from xy where (id=27 or id=28)   and convert(varchar(10),WRITETIME,120) bet...
  • qq_14861367
  • qq_14861367
  • 2016年06月21日 11:10
  • 4562

datePicker设置时间范围

datePicker
  • lvchao1122
  • lvchao1122
  • 2016年08月28日 10:55
  • 774

mysql 时间范围 查询

select * from  table as a  WHERE a.createTime > str_to_date('2014-04-22 15:47:06','%Y-%m-%d %H:%i:%s...
  • frykool
  • frykool
  • 2015年04月03日 10:13
  • 680

Oracle 关于日期范围的几个查询

查询两个时间点之间的所有日期: select (to_date('20140602', ' yyyyMMdd ') + rownum - 1) as CREATE_TIME   from all_...
  • cw370008359
  • cw370008359
  • 2015年06月24日 09:54
  • 1169
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算经过时间范围
举报原因:
原因补充:

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