java时间段收费_Java实现免费时段计算
public static longgetSpanHour(String string_time_in, String string_time_out, String string_free_start,
String string_free_end) {try{//包含的完整的免费时段次数
int span_times = 0;//跨天停车标识符
boolean dayFlag = false;
String date= string_time_in.substring(0, 10);
string_free_start= date + " " +string_free_start;
string_free_end= date + " " +string_free_end;//驶入时间
Timestamp time_in =Timestamp.valueOf(string_time_in);//驶出时间
Timestamp time_out =Timestamp.valueOf(string_time_out);long span_hour = (time_out.getTime() - time_in.getTime()) / (60 * 60 * 1000);//超时停车标识符
boolean overFlag = false;if ((time_out.getTime() - time_in.getTime()) % (60 * 60 * 1000) / (60 * 1000) > 5) {
overFlag= true;
}//免费停车标识符
boolean free = false;//免费时段开始
Timestamp free_start =Timestamp.valueOf(string_free_start);//免费时段结束
Timestamp free_end =Timestamp.valueOf(string_free_end);//免费时段时长(小时)
long span_free_hour = (free_end.getTime() - free_start.getTime()) / (60 * 60 * 1000) + 24;//停车时间超过24小时,跨天停车标识符为true,减去一个免费时段时长
long boundary =span_hour;while (boundary >= 24) {
boundary-= 24;
span_times++;
dayFlag= true;
}
span_hour= span_hour - span_times *span_free_hour;//时间转化为同一天进行计算剩余时长
time_in.setYear(time_out.getYear());
time_in.setMonth(time_out.getMonth());
time_in.setDate(time_out.getDate());
free_start.setYear(time_out.getYear());
free_start.setMonth(time_out.getMonth());
free_start.setDate(time_out.getDate());
free_end.setYear(time_out.getYear());
free_end.setMonth(time_out.getMonth());
free_end.setDate(time_out.getDate());if (time_in.before(free_end) || time_in.after(free_start)) {//免费时段驶入
if (time_out.before(free_end) || time_out.after(free_start)) {//免费时段驶出
overFlag = false;if (dayFlag) {//跨天停车
if (time_in.before(time_out)) {//转化为一天后,驶入时间在驶出时间之前
span_hour -= (time_out.getTime() - time_in.getTime()) / (60 * 60 * 1000);
}else if (time_in.after(time_out)) {//转化为一天后,驶入时间在驶出时间之后
span_hour -= 24 - Math.ceil((time_in.getTime() - time_out.getTime()) / (60.0 * 60 * 1000));
}else{//do nothing
}
}else {//非跨天停车
if (time_in.before(time_out)) {//转化为一天后,驶入时间在驶出时间之前
span_hour = 0;
free= true;
}else if (time_in.after(time_out)) {//转化为一天后,驶入时间在驶出时间之后
span_hour -=span_free_hour;
}else{//do nothing
}
}
}else {//非免费时段驶出
if((time_out.getTime() - free_end.getTime()) % (60 * 60 * 1000) / (60 * 1000) <= 5) {
overFlag= false;
}if (dayFlag) {//跨天停车
if (time_in.before(time_out)) {//转化为一天后,驶入时间在驶出时间之前
span_hour -= (free_end.getTime() - time_in.getTime()) / (60 * 60 * 1000);
}else if (time_in.after(time_out)) {//转化为一天后,驶入时间在驶出时间之后
span_hour -= 24 - (time_in.getTime() - free_end.getTime()) / (60 * 60 * 1000);
}
}else {//非跨天停车
if (time_in.before(time_out)) {//转化为一天后,驶入时间在驶出时间之前
span_hour -= (free_end.getTime() - time_in.getTime()) / (60 * 60 * 1000);
}else if (time_in.after(time_out)) {//转化为一天后,驶入时间在驶出时间之后
span_hour -= 24 - (time_in.getTime() - free_end.getTime()) / (60 * 60 * 1000);
}
}
}
}else {//非免费时段驶入
if (time_out.before(free_end) || time_out.after(free_start)) {//免费时段驶出
if (dayFlag) {//跨天停车
if (time_in.before(time_out)) {//转化为一天后,驶入时间在驶出时间之前
span_hour -= (time_out.getTime() - free_start.getTime()) / (60 * 60 * 1000);
}else if (time_in.after(time_out)) {//转化为一天后,驶入时间在驶出时间之后//do nothing
}
}else {//非跨天停车
if (time_in.before(time_out)) {//转化为一天后,驶入时间在驶出时间之前
span_hour -= (time_out.getTime() - free_start.getTime()) / (60 * 60 * 1000);
}else if (time_in.after(time_out)) {//转化为一天后,驶入时间在驶出时间之后//do nothing
}
}
}else {//非免费时段驶出
if (dayFlag) {//跨天停车
if (time_in.before(time_out)) {//转化为一天后,驶入时间在驶出时间之前//do nothing
} else if (time_in.after(time_out)) {//转化为一天后,驶入时间在驶出时间之后
span_hour -= 24 - ((time_in.getTime() - time_out.getTime()) / (60 * 60 * 1000));
span_hour+= (free_start.getTime() - time_in.getTime()) / (60 * 60 * 1000);
span_hour+= (time_out.getTime() - free_end.getTime()) / (60 * 60 * 1000);
}
}else {//非跨天停车
if (time_in.before(time_out)) {//转化为一天后,驶入时间在驶出时间之前//do nothing
} else if (time_in.after(time_out)) {//转化为一天后,驶入时间在驶出时间之后//do nothing
}
}
}
}//超过5分钟按一小时
if(overFlag) {
span_hour++;
}if (free || span_hour < 0) {
span_hour= 0;
}returnspan_hour;
}catch(Exception exception) {
exception.printStackTrace();
}return 0;
}
java时间段收费_Java实现免费时段计算相关推荐
- java 时间段重叠_java 判断两个时间段是否重叠的案例
java 判断两个时间段是否重叠的案例 发布时间:2020-10-21 16:08:51 来源:脚本之家 阅读:108 作者:SakuyaM 最近业务上遇到需要判断两个时间段是否存在重叠的情况,网上找 ...
- java延迟函数_Java 8:延迟计算
Java8:Stream概念的细化,讨论延迟计算/惰性求值Lazy Evaluations. Java中常见的逻辑操作be1&&f(),是短路/short-circuiting计算,避 ...
- java 10000阶乘_Java ForkJoinPool: 3秒计算100万的阶乘
问题背景&思路 如果需要计算100的阶乘,那应该怎么做? 方法1: for循环(默认,单线程) 方法2: 多线程,MapReduce思想 main线程开启多个子任务(个数=CPU核心数),放到 ...
- java 时间戳最大值_Java中在时间戳计算的过程中遇到的数据溢出问题解决
背景 今天在跑定时任务的过程中,发现有一个任务在设置数据的查询时间范围异常,出现了开始时间戳比结束时间戳大的奇怪现象,计算时间戳的代码大致如下. package com.lingyejun.authe ...
- java 公历 农历_Java给定公历日期计算相应农历/阴历日期
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- java 时间段重叠_Java判断多个时间段是否重叠(重叠区间个数)
import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * 判断多个时间段是否出现重叠 ...
- java 小数精确_Java中小数精确计算
小数精确计算 System.out.println(2.00 -1.10);//0.8999999999999999 上面的计算出的结果不是 0.9,而是一连串的小数.问题在于1.1这个数字不能被精确 ...
- java 自然周_java 使用Calendar类计算每月有多少自然周,并输出每周的开始和结束日期...
思路:首先是获取该月的实际天数,然后从1号遍历直至该月最后一天,利用Calendar类找出该日是一周中的第几天, (1)若该日是周日,则视为一周结束,并用该日期减去6找到该周的开始日期,若相减结果小于 ...
- java 停车收费_java 编程,停车收费简易系统
展开全部 代码如下,仅实现功能,未考虑安全等情况.//ParkingTest.java /** * 停车程序入口32313133353236313431303231363533e4b893e5b19e ...
最新文章
- 面试官问我:什么是高并发下的请求合并?
- 辞职后五险一金的处理方式
- [转]DPM2012系列之四:配置邮件报警功能
- java基础之 “==”和“ equals”以及instanceof的区别
- 阿里张磊:云计算生态价值点正迅速聚焦到“应用”上
- python可以处理什么文件夹_Python处理文件和文件夹的10条命令
- centos 对某ip开放 防火墙端口_CentOS7 firewalld防火墙指定IP与端口访问
- vs 本地调试(IIS)
- AV Linux 2016系统今年发布:影音制作专用
- Oracle 之 用户与权限
- JAVA入门级教学之(方法重写/方法重载)
- 南开大学计算机考研2019分数线,2019年南开大学考研复试分数线已公布
- Elasticsearch安装-源码
- tomcat中开启SSL
- Jmeter接口压力测试学习总结
- IBM Tivoli Management Framework默认设置漏洞
- 「镁客·请讲」移康智能朱鹏程:做产品就要直击痛点,多余的功能只会是噱头...
- golang 根据生日计算星座和属相
- MediaPlayer的消息机制分析
- LINUX JDK 安装与环境变量设置
热门文章
- 常州一院有全消化道的机器人的_快讯!常州市首例第四代“达芬奇机器人”手术在常州一院成功实施!...
- 小猪短租携手飞猪:共享住宿首推“先住后付”
- mysql 定期清理表数据_mysql 定期清理表数据库
- Apache Spark 3.2 内置支持会话窗口
- Eclipse 添加依赖 库 Libary
- IIS上安装Web平台安装程序
- c语言整形符号位_基本整形型变量-在C语言中,整型常量与整型变量的区别是什么?举例...
- 记录工作中遇到的正则表达式
- ​pmp是什么证,如何考取?
- 互联网电商大数据环境 ——大数飓数据分析实践培训精华笔记(一)——简介入门