OA系统的天数该怎样计算

news/2025/1/5 17:12:42/文章来源:https://www.cnblogs.com/lzj2024/p/18644363

在开发一些OA系统的过程中,经常能遇到一个问题,就是时长计算,比如请假有请假的时长,出差有出差的时长,有的公司请假只能按照整天或小时为单位请假,这种都比较好处理,只要排除休息日节假日天数或排除工作小时数加午休( 如果有的话😂)小时数直接相减即可,但是如果需求是按照半天为单位,OA系统该怎样计算总时长呢?

image

以半天为最小单位时,机械的加减有时可能无法和实际情况相符,例如我在OA系统提交休假审批,从1号上午到2号上午为假期,如果直接假定开始的小时都一样直接把日期时间简单相减,那么休假时间就是24小时构成的1天,但是实际上假期的构成是1号上午,1号下午,以及2号上午,按照工时的普遍计算逻辑就是1.5个工作日,OA系统应计算实际休假时长是1.5天,那这种场景下OA系统要怎样计算才准确呢,我把情况分为4种分别处理,分别计算休假一天,两天和三天的情况,进而推导到更长时间

1. 上午开始,上午结束

1天内的情况是0.5天,2天内的是1.5天,3天内是2.5天

2. 上午开始,下午结束

1天内的情况是1天,2天内的是2天,3天内是3天

3. 下午开始,下午结束

1天内的情况是0.5天,2天内的是1.5天,3天内是2.5天

4. 下午开始,上午结束

1天内不会有这种情况,2天内的是1天,3天内是2天

综上,计算的代码就是这样的:

public static void main(String[] args) {System.out.println(test(LocalDate.parse("2024-12-01"),LocalDate.parse("2024-12-03"),1,1));
}/*** * @param start 开始日期* @param end 结束日期* @param startPeriod 开始 1上午2下午* @param endPeriod 结束 1上午 2下午* @return*/
public static double test(LocalDate start, LocalDate end, int startPeriod, int endPeriod) {// 如果开始时间或结束时间为空,则返回 0 天if (start == null || end == null) {return 0.0; // 确保返回值类型一致}// 先将小时分钟秒调到00:00:00计算两个日期之间的整天数double between = (double) java.time.temporal.ChronoUnit.DAYS.between(start, end);//天数相减会把涉及的天数算少一天,所以要加回来between ++;// 根据时间段调整天数if (startPeriod == 1) { // 开始是上午if (endPeriod == 1) { // 结束是上午between =  between - 0.5 ;}}else if (startPeriod == 2) { // 开始是下午if (endPeriod == 1) { // 结束是上午between = between - 1;}else if (endPeriod == 2) { // 结束是下午between = between - 0.5 ;}}// 返回计算后的天数return between;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/861965.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目管理中的甘特图应用与实践

在项目管理的领域中,甘特图是一种被广泛应用的工具,它以可视化的方式展示项目进度、任务关系以及资源分配等关键信息。甘特图的应用不仅能够帮助项目管理者更好地规划和执行项目,还能让团队成员清晰地了解项目的整体情况。想象一下,在一个复杂的项目中,通过甘特图将任务与…

ASP.NET Core技术研究-探秘依赖注入框架

ASP.NET Core在底层内置了一个依赖注入框架,通过依赖注入的方式注册服务、提供服务。依赖注入不仅服务于ASP.NET Core自身,同时也是应用程序的服务提供者。 毫不夸张的说,ASP.NET Core通过依赖注入实现了各种服务对象的注册和创建,同时也实现了面向抽象的编程模式和编程体验…

读懂华为开发者空间第一课,让云上开发如此简单

课程由浅入深带领开发者了解华为开发者空间,包含鲲鹏、昇腾、鸿蒙等华为优质开发工具和资源、真实项目开发案例等,构建对华为开发者空间的系统性认知框架。近日,华为云上线的《华为开发者空间快速入门》课程,汇聚了理论知识讲解、案例介绍和丰富的实践练习,通过循序渐进的…

【iscsi使用】3.无盘启动CentOS7

目录1.SAN存储及NAS存储 2.CentOS7搭建iscsi服务器 3.无盘启动CentOS7前言业务中遇到这样一个问题: 使用别人的GPU服务器,来跑自己的训练数据。 因为数据的特殊性,一旦数据落盘到GPU服务器,硬盘必须交给数据方。数据方也提出,可提供同型号同容量的硬盘更换。但是机器方考虑…

.NET Core技术研究-HttpContext访问的正确方式

将ASP.NET升级到ASP.NET Core之后,相信大家都会遇到HttpContext.Current无法使用的问题。这也是我们迁移ASP.NET Core必须解决的问题。 先列一下使用HttpContext的具体场景: 1. 在Controller层访问HttpContext 2. 在中间件中使用HttpContext 3. 在数据访问层使用HttpContext …

chrome播放webRTC的H265视频方法

需求描述 最近有需求实现浏览器直接播放摄像头视频 鉴于Camera本身支持了rtsp流,本想web直接播放rtsp,但是还不行,搜了一下webRTC实现的效果和延迟会好一些。于是就使用了mediaMTX转了下rtsp的流,变为webRTC。 随便写了个h5页面对视频进行播放,使用下面代码的话替换一下sr…

在Excel 2013中调出开发工具

打开Excel 2013,点击左上角的【文件】菜单,在【文件】菜单下,选择【选项】按钮 在弹出的【Excel选项】界面中,选择【快速访问工具栏】。在【自定义功能区】处,勾选【开发工具】选项。设置完成后,关闭【选项】界面。这时,在功能区靠右端就可以看到新增加的【开发工具】选…

库卡机械臂驱动器KPS600故障维修

首先,当出现库卡机器人驱动器过载时,首要任务是确认过载的原因。过载可能由多种因素引起,如电源电压不稳定、负载过大、电机故障或控制器设置不当等。通过检查电源电压、负载情况、电机运行状态以及控制器设置,我们可以初步判断KUKA工业机械手驱动器过载的根源。 一旦确定了…

流量分析 - 练习篇2

L1-2 流量分析流量包描述:某天晚上安服仔小辉辉上班摸鱼期间突然发现服务器登入页面被挤掉线了,于是第六感告诉他,服务器肯定是被黑客攻击了,于是他赶紧把服务器的网线拔了并调取了那段时间的流量,然后慌忙的找到你,求求你救救安服仔吧1.分析L1-2.pcapng数据包文件,通过…

Centos 7.9部署ldap 2.4.44

1、环境准备 [root@ldap81 openldap]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [root@ldap81 openldap]# uname -r 3.10.0-1160.119.1.el7.x86_64systemctl stop firewalld systemctl disable firewalld setenforce 0 hostnamectl set-hostname ldap81…

[241231]阿普米司特抗银屑病的同时辅助抗真菌感染

已知真菌定植/感染可能参与触发或加重斑块状银屑病. 抗IL-17和TNFi可能增加真菌感染风险. 一项探索性研究通过70例难治部位(头皮, 指甲, 间擦部/外生殖器)银屑病患者接受阿普米司特治疗前以及治疗1年过程中(允许局部真菌感染入组并继续抗真菌治疗), 监测真菌定植/局部真菌感染以…