java 计算有效时长,有一时间段不计算时长

  • 计算时效性

计算 2020-08-07 10:10:23 到 2020-08-08 22:10:23 时间段内有多少小时,每天的01:00:00至06:00:00不计时长

计算时效性

同一天内有6种情况,分别是
00:00:00[s][e]01:00:00;
00:00:00[s]01:00:00 AND 01:00:00[e]06:00:00
00:00:00[s]01:00:00 AND 06:00:00[e]23:59:59
01:00:00[s][e]06:00:00
01:00:00[s]06:00:00 AND 06:00:00[e]23:59:59
06:00:00[s][e]23:59:59
计算不同天,不同天分为两个同一天分别计算相加
1.第一天开始时间~ “23:59:59”
2."00:00:00"~最后一天的结束时间
计算不同天的天数减去1得到相隔周期,乘以周期值

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;/*** 累计时长计算 并且每天的01:00:00至06:00:00不计时长* * @author weixiaoshuai 2020-08-07 16:00:00**/
public class wxsJS {private static String start = "01:00:00";private static String end = "06:00:00";public static void main(String[] args) {String startTime1 = "2020-08-07 10:10:23";String endTime1 = "2020-08-08 22:10:23";System.out.println("有效时长:"+new wxsJS().youxiaoshichangjisuan(startTime1, endTime1));// 有效时长H}public String youxiaoshichangjisuan(String startTime1, String endTime1) {String s = " ";DecimalFormat df1 = new DecimalFormat("0.00");try {Date startTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(startTime1);Date endTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(endTime1);float shichang1 = (endTime.getTime() - startTime.getTime()) / 1000.0F / 60.0F;// 60.0F;float shichang = 0;String startTian = startTime1.split(" ")[0];String endTian = endTime1.split(" ")[0];Date t1 = new SimpleDateFormat("yyyy-MM-dd").parse(startTian);Date t2 = new SimpleDateFormat("yyyy-MM-dd").parse(endTian);int t = (int) ((t2.getTime() - t1.getTime()) / 1000.0F / 60.0F / 60.0F / 24.0F);String startHms = startTime1.split(" ")[1];String endHms = endTime1.split(" ")[1];if (t == 0) {// 同一天的时间 endHmsD 永远大于 startHmsD// 00:00:00~[s][e]~01:00:00 or// 00:00:00~[s]~01:00:00 or// 06:00:00~[e]~23:59:59 or// 06:00:00~[s][e]~23:59:59shichang = cs(startHms, endHms);} else {// 不同一天的时间 endHmsD 永远大于 startHmsD// 00:00:00~[e]~01:00:00 or// 00:00:00~[s][e]~01:00:00 or// 00:00:00~[s]~01:00:00 or// 06:00:00~[e]~23:59:59 or// 06:00:00~[s][e]~23:59:59 or// 06:00:00~[s]~23:59:59float shichangone = cs(startHms, "23:59:59");float shichangtow = cs("00:00:00", endHms);shichang = shichangone + shichangtow + ((t - 1) * 19);}s = df1.format(shichang);System.err.println(t + "告警开始时间:" + startTime1 + " - " + endTime1 + " -- " + shichang1 + " --- " + shichang);} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}return s;}private static float cs(String startHms, String endHms) throws ParseException {float shichang = 0;Date startHmsD = new SimpleDateFormat("HH:mm:ss").parse(startHms);Date endHmsD = new SimpleDateFormat("HH:mm:ss").parse(endHms);Date duan1 = new SimpleDateFormat("HH:mm:ss").parse("00:00:00");Date duan2 = new SimpleDateFormat("HH:mm:ss").parse(start);Date duan3 = new SimpleDateFormat("HH:mm:ss").parse(end);Date duan4 = new SimpleDateFormat("HH:mm:ss").parse("23:59:59");if (startHmsD.getTime() >= duan1.getTime() && startHmsD.getTime() <= duan2.getTime()&& endHmsD.getTime() >= duan1.getTime() && endHmsD.getTime() <= duan2.getTime()) {// 00:00:00~[s][e]~01:00:00shichang = shichang + (endHmsD.getTime() - startHmsD.getTime()) / 1000.0F / 60.0F / 60.0F;}if (startHmsD.getTime() >= duan1.getTime() && startHmsD.getTime() <= duan2.getTime()&& endHmsD.getTime() >= duan2.getTime() && endHmsD.getTime() <= duan3.getTime()) {// 00:00:00~[s]~01:00:00// AND// 01:00:00~[e]~06:00:00shichang = shichang + (duan2.getTime() - startHmsD.getTime()) / 1000.0F / 60.0F / 60.0F;}if (startHmsD.getTime() >= duan1.getTime() && startHmsD.getTime() <= duan2.getTime()&& endHmsD.getTime() >= duan3.getTime() && endHmsD.getTime() <= duan4.getTime()) {// 00:00:00~[s]~01:00:00// AND// 06:00:00~[e]~23:59:59shichang = shichang + (duan2.getTime() - startHmsD.getTime()) / 1000.0F / 60.0F / 60.0F+ (endHmsD.getTime() - duan3.getTime()) / 1000.0F / 60.0F / 60.0F;}if (startHmsD.getTime() >= duan2.getTime() && startHmsD.getTime() <= duan3.getTime()&& endHmsD.getTime() >= duan2.getTime() && endHmsD.getTime() <= duan3.getTime()) {// 01:00:00~[s][e]~06:00:00shichang = 0;}if (startHmsD.getTime() >= duan2.getTime() && startHmsD.getTime() <= duan3.getTime()&& endHmsD.getTime() >= duan3.getTime() && endHmsD.getTime() <= duan4.getTime()) {// 01:00:00~[s]~06:00:00// AND// 06:00:00~[e]~23:59:59shichang = shichang + (endHmsD.getTime() - duan3.getTime()) / 1000.0F / 60.0F / 60.0F;}if (startHmsD.getTime() >= duan3.getTime() && startHmsD.getTime() <= duan4.getTime()&& endHmsD.getTime() >= duan3.getTime() && endHmsD.getTime() <= duan4.getTime()) {// 06:00:00~[s][e]~23:59:59shichang = shichang + (endHmsD.getTime() - startHmsD.getTime()) / 1000.0F / 60.0F / 60.0F;}return shichang;}
}

java 计算有效时长,有一时间段不计算时长相关推荐

  1. 多个日期时间段进行合并计算时长,剔除重叠时间段

    多个日期时间段进行合并,算出经历的时长_itrytellyou的博客-CSDN博客_多个时间段合并多个日期时间段进行合并,算出经历的时长背景描述思路代码背景描述在公司进行人员描图模块开发时,涉及到了人 ...

  2. java里怎么判断时间重合_java 时间段重合时间差

    //可用于考勤节假日,午休,夜班做剔出时间计算 package test; import java.text.ParsePosition; import java.text.SimpleDateFor ...

  3. java计算字符串中字符出现的次数_java – 计算字符串中字符出现次数

    参见英文答案 > Java compressing Strings                                    18个 我正在尝试编写一个Java程序,它接受一个字符串 ...

  4. [C/C++]记录:使用sprintf_s时第二个参数不严格计算导致栈损坏

    (1)使用sprintf_s时第二个参数不严格计算导致栈损坏的情况 这段代码之前便是函数的定义变量的部分. 此处没有严格计算第一个参数指向的字符串的可用长度. 查看局部变量,发现在函数开头初始化为0的 ...

  5. java android长连接_基于Java Socket的自定义协议,实现Android与服务器的长连接(一)...

    一.基础知识准备 在正式给大家介绍自定义协议之前,我们先对网络传输和协议解析的相关知识点做一个基本的介绍,尽管这些知识点我们在学校里学过,但难免会有所遗忘,这里先做一个简单的介绍,以便对后文的内容理解 ...

  6. 【JAVA】(vip)蓝桥杯试题 基础练习 阶乘计算 BASIC-30 JAVA

    目录 试题 基础练习 阶乘计算 要点 思路 代码(无注释) 代码(含有注释) 代码二,==运行超时,内存也超了==某位同学提出的是使用java的大数类BigInteger 试题 基础练习 阶乘计算 资 ...

  7. 字符串求最长公共子序列(相似度计算)

    方法一: 思想 由大到小的截取并返回 保证如果返回肯定是返回最大的 短字符串的处方式:第一次for循环:递减 .第二次for循环 :截取该长度字符串的可行方案个数     然后截取 长字符串长度处理方 ...

  8. 键盘录入长方形的长和宽,定义方法计算该长方形的周长,并在main方法中打印周长

    键盘录入长方形的长和宽,定义方法计算该长方形的周长,并在main方法中打印周长 package com;import java.util.Scanner;public class Demo02 {pu ...

  9. php 客户端socket长连接超时,[PHP] socket客户端时的超时问题

    连接socket分为连接超时和读取超时 $sock=stream_socket_client("www.google.com:80", $errno,$errstr,2);    ...

最新文章

  1. Oracle 数据恢复指导具体解释
  2. aic bic mdl
  3. vue 子级拿值_vue 父组件通过$refs获取子组件的值和方法详解
  4. MySQL数据库服务器 主从配置
  5. SearchRecentsuggestionsProvider
  6. RxJava 2.0的基本使用
  7. Windbg学习 (0x0007) 命令-会话控制
  8. 使用IB时设置textView属性崩溃
  9. jacob 详解 语音_JAVA 实现Jacob语音播报
  10. Linux 数据重定向
  11. C/C++[codeup 2063]日期累加
  12. mysql安装显示挂起_安装SQL时提示有挂起的文件操作无法安装的解决
  13. 文件和base64编码的相互转换
  14. UEFI 文件类型 .efi (二)
  15. rgss3a解包器_Rgss3a解包器下载
  16. CNN英文垃圾邮件分类(数据预处理)
  17. 故障树最小割集程序化设计方案
  18. Keil(MDK)下用仿真器烧程序的同时烧写附加数据到SPI FLASH
  19. linux下4g拨号上网问题,解决 Ubuntu 18.04 下无法建立 4G 拨号的问题
  20. 要把服务器架在太空的海盗湾,为什么能活十五年?

热门文章

  1. go cap和len的区别
  2. 03-HTML框架介绍——body
  3. 新浪分享 Insufficient app permissions!
  4. 关于校园新闻系统设计的答辩流程指导
  5. org.hibernate.MappingException: Could not determin
  6. 神鱼:未来PoS是更好的选择,Staking和Defi可能会形成博弈
  7. MySQL NOW() 是否包含夏令时
  8. Oracle EBS OM Back To Back Orders(背靠背业务)测试
  9. “后 Hadoop 时代”,大数据从业者如何应对新技术趋势带来的挑战?
  10. python 人工智能培训班(python的诠释)