工作日查找方法、装置、存储介质及设备制造方法及图纸

技术编号:22167035 阅读:19 留言:0更新日期:2019-09-21 10:38
本发明专利技术涉及数据处理技术领域,公开了一种工作日查找方法、装置、存储介质及设备,该方法包括步骤:S1:读取用户配置文件并从中提取节假日,将节假日顺序存储,形成节假日序列;S2:分别定位开始日期和结束日期在所述节假日序列中的位置,并统计开始日期和结束日期之间的节假日数量;S3:开始日期和结束日期之间的总天数减去所述节假日数量以得到开始日期和结束日期之间的工作日数量。本方法不需要访问数据库,而且不需要遍历每一个工作日,节假日数量相对很少,遍历时间大大减少,从而能够快速计算出工作日数量。

Workday search methods, devices, storage media and equipment

【技术实现步骤摘要】
工作日查找方法、装置、存储介质及设备
本专利技术涉及数据处理
,特别涉及一种工作日查找方法、装置、存储介质及设备。
技术介绍
传统工作日计算方式为:直接基于java.util.Calendar判断起止时间范围内的工作日,即给出开始日期和结束日期后顺序查找即可计算出工作日天数。此种算法的好处在于逻辑简单,无须额外数据配置即可计算出来。但实际情况是周末可能要工作,非周末可能是节假日,因此,此种计算方式只适用于没有额外节假日的情况。基于以上原因,一般企业开始会设计一张日历表,记录工作日与节假日,并提供功能界面给用户进行人工配置,之后所有工作日计算皆以用户配置的数据为准。计算方式大致如下:设置结束日期→设置开始日期→顺序查询从开始日期到结束日期范围内的工作日数量。此方法可解决工作日或节假日计算不准确的问题,但工作日的查询依赖数据库,若只进行一次计算,计算开销并不大,当涉及大量工作日计算时(例如:成百上千条报表数据,每一条报表数据都需要计算不同时间段的工作日),大大增加数据库负荷,并且计算效率低下。
技术实现思路
本专利技术提出一种工作日查找方法、装置、存储介质及设备,解决现有技术中工作日查找方法中数据库负荷大,计算效率低的问题。本专利技术的一种工作日查找方法,包括步骤:S1:读取用户配置文件并从中提取节假日,将节假日顺序存储,形成节假日序列;S2:分别定位开始日期和结束日期在所述节假日序列中的位置,并统计开始日期和结束日期之间的节假日数量;S3:开始日期和结束日期之间的总天数减去所述节假日数量以得到开始日期和结束日期之间的工作日数量。其中,所述步骤S2包括:采用二分查找法定位开始日期在节假日序列中的位置;采用二分查找法定位结束日期在开始日期和节假日序列尾部之间的位置;统计开始日期和结束日期之间的节假日数量。其中,所述步骤S2包括:分别计算开始日期和结束日期相对年初间隔的周数,以定位到间隔周数前后各一周的节假日序列范围;在所述节假日序列范围内分别采用二分查找法定位所述开始日期和结束日期在节假日序列中的位置;统计开始日期和结束日期之间的节假日数量。其中,若开始日期和结束日期跨年,则按年度分成不同的开始日期和结束日期段,节假日序列也按年度划分成不同的节假日时间段,按年度执行步骤S2和S3,再将各年度计算的工作日数量相加。本专利技术还提供了一种工作日查找装置,包括用于执行上述任一项所述的方法的单元。本专利技术还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述任一项所述的方法。本专利技术还提供了一种工作日查找设备,包括:处理器、网络接口和存储器,所述处理器、所述网络接口和所述存储器相互连接,其中,所述网络接口受所述处理器的控制用于收发消息,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述任一项所述的方法。本专利技术的方法中,先将用户配置文件中的节假日提前出来并顺序存储在内存中,再分别定位开始日期和结束日期在节假日序列中的位置,本方法不需要访问数据库,而且不需要遍历每一个工作日,节假日数量相对很少,遍历时间大大减少,从而能够快速计算出工作日数量。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术的一种工作日查找方法流程图。具体实施方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本实施例的工作日查找方法如图1所示,包括:步骤S1,读取用户配置文件并从中提取节假日,将节假日顺序存储,形成节假日序列。其中,数据库中的日历数据不分工作日和节假日,用户配置后,一天一条数据,通过一个标记字段区分是工作日还是节假日,如:1表示工作日,0表示节假日,配置完成后生成数据库文件。提取出节假日后,可通过数组结构将节假日顺序存储在内存中,不需每次计算工作日都去访问数据库,减轻了数据库的负担。步骤S2,分别定位开始日期和结束日期在节假日序列中的位置,并统计开始日期和结束日期之间的节假日数量。步骤S3,开始日期和结束日期之间的总天数减去所述节假日数量以得到开始日期和结束日期之间的工作日数量。本实施例的方法中,先将用户配置文件中的节假日提前出来并顺序存储在内存中,再分别定位开始日期和结束日期在节假日序列中的位置,本方法不需要访问数据库,而且不需要遍历每一个工作日,节假日数量相对很少,遍历时间大大减少,从而能够快速计算出工作日数量。为了提高查找速度,本实施例中,步骤S2包括:采用二分查找法定位开始日期在节假日序列中的位置,若开始日期为节假日则查找到即被定位,若不是节假日,则定位在最后一次查找完成后的两个相邻节假日之间。采用二分查找法定位结束日期在开始日期和节假日序列尾部之间的位置,由于结束日期都在开始日期之后,在定位结束日期时只在开始日期和节假日序列尾部之间定位,缩小了定位范围,提高了定位速度。统计开始日期和结束日期之间的节假日数量。经1亿次计算测试,采用二分查找法基本O(7)即可得到结果,效率大概是传统访问数据库且顺序查询方法的10倍以上。为了进一步提高查找速度,可以对二分查找法定位开始日期和结束日期进行优化,优化后的步骤S2包括:分别计算开始日期和结束日期相对年初间隔的周数,以定位到间隔周数前后各一周的节假日序列范围。在所述节假日序列范围内分别采用二分查找法定位开始日期和结束日期在节假日序列中的位置。统计开始日期和结束日期之间的节假日数量。由于提前定位到较小的节假日序列范围,可以实现更快地开始日期和结束日期定位,从而提升工作日数据的计算效率。此种方式的复杂度会出现大于O(7)的情况,表面上看效率低于二分查找法,但实际上,经1亿次随机日期计算测试,采用二分查找法70%的数据需要的时间复杂度为O(7),仅30%左右的数据低于O(7);而使用优化的方法,80%的结果都保持在O(4)以内,其中约15%为O(1),所以,从总的结果上看,优化的定位方法效率更高。由于计算机系统中日期都是按年存储,若开始日期和结束日期跨年,则按年度分成不同的开始日期和结束日期段,节假日序列也按年度划分成不同的节假日时间段,按年度执行步骤S2和S3,再将各年度计算的工作日数量相加。例如:开始日期为2018年3月1日,结束日期为2019年6月1日,则按年度分成两个开始日期和结束日期段,即2018年3月1日~2018年12月31日和2019年1月1日~2019年6月1日。本专利技术还提供了一种工作日查找装置,包括用于执行上述任一项所述的方法的单元。本专利技术还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述任一项所述的方法本文档来自技高网...

【技术保护点】
1.一种工作日查找方法,其特征在于,包括步骤:S1:读取用户配置文件并从中提取节假日,将节假日顺序存储,形成节假日序列;S2:分别定位开始日期和结束日期在所述节假日序列中的位置,并统计开始日期和结束日期之间的节假日数量;S3:开始日期和结束日期之间的总天数减去所述节假日数量以得到开始日期和结束日期之间的工作日数量。

【技术特征摘要】
1.一种工作日查找方法,其特征在于,包括步骤:S1:读取用户配置文件并从中提取节假日,将节假日顺序存储,形成节假日序列;S2:分别定位开始日期和结束日期在所述节假日序列中的位置,并统计开始日期和结束日期之间的节假日数量;S3:开始日期和结束日期之间的总天数减去所述节假日数量以得到开始日期和结束日期之间的工作日数量。2.如权利要求1所述的工作日查找方法,其特征在于,所述步骤S2包括:采用二分查找法定位开始日期在节假日序列中的位置;采用二分查找法定位结束日期在开始日期和节假日序列尾部之间的位置;统计开始日期和结束日期之间的节假日数量。3.如权利要求1所述的工作日查找方法,其特征在于,所述步骤S2包括:分别计算开始日期和结束日期相对年初间隔的周数,以定位到间隔周数前后各一周的节假日序列范围;在所述节假日序列范围内分别采用二分查找法定位所述开始日期和结束日期在节假日序列中的位置;统计开始日期和结束日期之间的节假...

【专利技术属性】
技术研发人员:王海瑜
申请(专利权)人:重庆颂拓科技有限公司
类型:发明
国别省市:重庆,50

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1