计算平均时间_我纯洁全身都纯洁的博客-程序员秘密_计算平均时间

技术标签: 计算平均时间  平均时间  平均下班时间  java 积累篇  

序号 工作日期 上班时间 下班时间
1 2019-03-01 08:55:00 18:01:24
2 2019-03-04 08:55:00 21:00:08
3 2019-03-05 08:55:00 21:00:18
4 2019-03-06 08:55:00 21:00:00
5 2019-03-07 08:55:00 21:00:00
6 2019-03-08 08:55:00 18:00:00
7 2019-03-09 08:55:00 03:10:20

 假如现在有以上表格,记录了每天的上下班时间,现在要求出平均每天的下班时间。


public class Test {

	public static void main(String[] args) {
		
		//数组里面放的是上班时间和下班时间
		//上班时间唯一的作用是判断如果下班时间小于上班时间,则表示加班到第二天这个时间才下班
		
		String[][] strArray = {
   {"08:55:00", "18:01:24"},
						{"08:55:00", "21:00:08"},
						{"08:55:00", "21:00:18"},
						{"08:55:00", "21:00:00"},
						{"08:55:00", "21:00:00"},
						{"08:55:00", "18:00:00"},
						{"08:55:00", "03:10:20"}//加班到第二天凌晨3点
					};
		System.out.println(calculation(strArray));
	}
	
	/**
	 * 计算平均下班时间
	 */
	public static String calculation(String[][] strArray) {
		
		//总共秒数
		long total = 0;
		for (int i = 0; i < strArray.length; i++) {
			
			//判断是否是加班到第二天
			if (isTimeOut(strArray[i][0], strArray[i][1])) {
				//加班到第二天下班
				String time[] = strArray[i][1].split(":"); //时分秒分割
				long l1 = Long.parseLong(time[0]) * 3600; //小时转为秒数
				long l2 = Long.parseLong(time[1]) * 60; //分钟转为秒数
				long l3 = Long.parseLong(time[2]); //秒数
				total += (l1 + l2 + l3) > 6 * 3600 ? 6 * 3600 : (l1 + l2 + l3); 超过6点按6点计算

				//第二天的时长加上第一天的工作时长
				total += (24 * 3600);
			}
			else {
				//24点之前下班
				String time[] = strArray[i][1].toString().split(":"); //时分秒分割
				long l1 = Long.parseLong(time[0]) * 3600; //小时转为秒数
				long l2 = Long.parseLong(time[1]) * 60; //分钟转为秒数
				long l3 = Long.parseLong(time[2]); //秒数
				total += (l1 + l2 + l3);
			}
			
		}
		//平均秒数
		long average = total / strArray.length; //计算平局每天的秒数
		
		//平均时间大于24点,显示第二天的时间,并且减去第一天的时长
		String nextDay = "";
		if (average >= 24 * 3600) {
			average = average - (24 * 3600);
			nextDay = "第二天";
		}
		
		long average1 = average / 3600; //秒数转小时
		long average2 = (average % 3600) / 60; //秒数转分钟
		long average3 = (average % 3600) % 60; //秒

                //不足两位前面补0
		String d1 = addZero(average1);
		String d2 = addZero(average2);
		String d3 = addZero(average3);
		String showTime = d1 + ":" + d2 + ":" + d3; //拼接时分秒
		showTime = showTime.equals("24:00:00") ? "00:00:00" : showTime;
		return showTime;
	}
	
	/**
	 * 判断下班时间是否早于上班时间,如果是,说明是加班到第二天
	 * 加班返回true,没加班返回false
	 */
	public static boolean isTimeOut(String sTime, String eTime) {
		String sTimeArr[] = sTime.split(":");
		String eTimeArr[] = eTime.split(":");
		
		//上班时间秒数
		long s1 = Long.parseLong(sTimeArr[0]) * 3600; //小时转为秒数
		long s2 = Long.parseLong(sTimeArr[1]) * 60; //分钟转为秒数
		long s3 = Long.parseLong(sTimeArr[2]); //秒数
		long sTotal = s1 + s2 + s3;
		
		//下班时间秒数
		long e1 = Long.parseLong(eTimeArr[0]) * 3600; //小时转为秒数
		long e2 = Long.parseLong(eTimeArr[1]) * 60; //分钟转为秒数
		long e3 = Long.parseLong(eTimeArr[2]); //秒数
		long eTotal = e1 + e2 + e3;
		
		return eTotal < sTotal;
	}
	
	/**
	 * 日期时间补0
	 */
	public static String addZero(long i) {
		
		return i < 10 ? ("0" + i) : i + "";
	}
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hjgzj/article/details/88201428

智能推荐

学习JBPM_snowdot23的博客-程序员秘密

从www.jbpm.org下载jbpm-1.0.1版本修改StartJbpmServer.bat中的jboss的路径运行StartJbpmServer.bat运行http://localhost:8080/jbpm/userShowHome.do实际运行Holiday request例子,明白处理过程在进一步学习

10道面试基础笔试题,你能对几题?_松勤软件测试的博客-程序员秘密

面试之前要笔试笔试之前先来看看你能对几道题吧

5.8 正则化和数据标准化_jhshanvip的博客-程序员秘密

5.8 正则化和数据标准化方程 Ax=bA\mathbf{x}=\mathbf{b}Ax=b 矩阵 AAA 列满秩时才有最小二乘解。矩阵 AAA 列满秩,即矩阵列向量组是无关组,根据无关组性质,即不存在非零向量 v\mathbf{v}v 使 Av=0A\mathbf{v}=\mathbf{0}Av=0 成立。矩阵 AAA 向量组极其接近相关时,则存在非零单位向量 v,u\mathbf{v},\m...

preventDefault()恢复_传说中胖子的博客-程序员秘密_preventdefault 恢复

function isScroll(){ event.stopPropagation(); event.preventDefault();}window.addEventListener("touchmove", isScroll, {passive:false});当使用上面方法阻止touchmove后可以使用removeEventListener恢复touchmovewindow.removeEventListener("touchmove", isScroll);注意添加和移.

nginx自定义404、500页面更改或关闭favicon.ico_shardy1986的博客-程序员秘密

一、自定义错误页面1、在nginx配置文件nginx.conf的http中添加这样一句话,表明要使用自定义的错误提示页面:fastcgi_intercept_errors on; #表明使用自定义错误提示2、指定的server中配合,配置404.html或者500.html页面fastcgi_intercept_errors on;server { listen ...

自动驾驶汽车电子电气架构技术开发_SAUTOMOTIVE的博客-程序员秘密_自动驾驶电气架构

本文由李春,聂石启,司炎鑫,刘明春联合创作摘要对汽车电子电气架构进行概念综述;分析“深蓝”车型的自动驾驶系统框架结构和电子电气架构;总结归纳汽车行业电子电气架构的演进趋势,并结合汽车向智能化、网联化发展的趋势,对未来汽车电子电气架构进行展望。随着人工智能、计算机、5G、物联网、大数据、区块链等新一代技术与汽车产业的深度融合,自动驾驶汽车的重要性日益凸显,正逐渐成为全球汽车产业发展的战略制高点,世界各国正在加速布局。当前,智能化、网联化、电动化和共享化是汽车技术演进的重要特征和产业发展趋势

随便推点

设计模式——设计模式三大分类以及六大原则_SEU_Calvin的博客-程序员秘密_设计模式有哪些

1. 设计模式三大分类 设计模式分为三种类型,共23类。(1)创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。(2)结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。(3)行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。2. 六大原则2.1单一职...

Anaconda多环境下Ubuntu Terminal无法切换Python版本的问题_沙子是沙子的博客-程序员秘密

一、背景【Ubuntu20.04 虚拟机 ;Anaconda3】因为要导入一个别人的工程,需要创建一个Python3.6.8 TensorFlow1.14版本虚拟环境# 创建环境conda create --name tf1.14 python==3.6.8# 下载TensorFlow 1.14版本pip install tensorflow==1.14二、问题但是当我激活 tf1.14 环境后运行 Python 发现还是原来的base环境中Python。导入imp.

我们到底该如何学习《数据结构与算法》?_愚公要移山的博客-程序员秘密

本文出自《愚公要移山》个人博客中,地址www.javachat.cc收录于《手牵手一起学习数据结构与算法》专栏前言:我们到底该不该学习算法与数据结构? 1、真的应该学习这个问题本身就不是个问题,所有人都在强调数据结构与算法比较重要,但是好像平时也没用到,无法直观的去感受它的重要性,于是把学习重心放在了常见的哪些框架身上,似乎只要熟悉了哪些框架的API,编程就会所向披靡。我举一个我自身的例子,我本科期间想做一个APP,主要是在线预约的功能,既然是在线预约,用户多了之后那就需要排队,当时也不管三.

自动驾驶系统中视觉感知模块的安全测试_SAUTOMOTIVE的博客-程序员秘密

本文由吴昊,王浩,苏醒,李明昊,许封元,仲盛联合创作摘要近年来,基于深度学习的视觉感知技术的发展极大地促进了车联网领域中自动驾驶的繁荣,然而自动驾驶系统的安全问题频出引发了人们对自动驾驶未来的担忧.由于深度学习系统的行为缺乏可解释性,测试基于深度学习的自动驾驶系统的安全性极具挑战性.目前已有针对自动驾驶场景的安全性测试工作被提出,但这些方法在测试场景生成、安全问题检测和安全问题解释等方面仍存在不足之处.针对基于视觉感知的自动驾驶系统,设计开发了一种场景驱动的、可解释强的、运行高效的安全性测试系统

July 28th 2017 Week 30th Friday_dflkg8956的博客-程序员秘密

If equal affection cannot be, let the more loving be me.如果没有相等的爱,那就让我爱多一点吧。There is seldom equal affection.If you want to be loved deeply, you ought to give more love to your lover first....

UNIX网络编程----非阻塞式I/O(十六)_鱼思故渊的博客-程序员秘密

UNIX网络编程-----非阻塞式I/O一、概述套接字的默认状态是阻塞的。这就意味着放发出一个不能立即完成的套接字调用时,其进程被投入睡眠,等待相应操作完成,可能阻塞的套接字调用可分为以下四类:1)             输入操作:包括read、readv、readmsg、readfrom、recv共5个函数。如果某个进程对一个阻塞的TCP套接字(默认设置)调用这些输入函数之一,而且

推荐文章

热门文章

相关标签