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

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:59
				shichang = 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:59
				float 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 block
			e.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:00
			shichang = 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:00
			shichang = 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:59
			shichang = 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:00
			shichang = 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:59
			shichang = 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:59
			shichang = shichang + (endHmsD.getTime() - startHmsD.getTime()) / 1000.0F / 60.0F / 60.0F;
		}

		return shichang;
	}
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tsxw001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值