你是否有这样的需求,有一个任务需要在大家都休息的时候处理,你肯定会想到周六周日了,那不好意思,遇到调休怎么办呢?遇到国假怎么办呢?我这里所说的节假日和工作日不仅仅指正常的周一至周日,还包括国家法定假日和调休日,即 工作日休息和周末上班 。
如上图所示,其实,总结下来,我们只需要关注 2 类日子即可:
-
周六周日需要调休(上班)的日子,如上图的 14 和 29
-
周一至周五需要休息的日子,如上图的 16,17,1-4
那这个日子一般在哪里知道呢?某度搜了一下“节假日api”,还是找到几个的,至于能不能用,是否准确,SLA可用度如何,还有待进一步考察,继续往下看,我们尽可能让问题能可靠的解决。
手动维护
其实,我们手动维护也是可以的,就是得有人手人力来关注国家发布的假日安排计划,这个假日安排在哪里呢?每个节日来临前肯定会收到各种推送的,另外一个比较全的是政府每年发布的调休计划表,如 23 年底发布的:
国务院办公厅关于2024年部分节假日安排的通知_其他_中国政府网
这个公告其实前一年的 10 月份大概就会发出来,这个内容是比较权威的吧,一般不会改(特殊情况也会有的,不用考虑),但是这个内容不太容易给一般的程序使用,不太好解析,当然我们人为看还是可以看明白的,手动维护一下每年的特殊节假日及调休表即可(正常的工作日和周末不需要处理)。
可以设计一张只有 2 个字段就够的表来存储它们:
-
day, 日期,如 20241001
-
status, 状态,如 1 表示工作日需要休息,2 表示周末需要上班
放心,不会太多,每年也就 30 条数据而已,如我之前做的手动维护的。
手动当然是 OK 的,但是万一忘记了咋办呢?定闹铃?每天发提醒?反正想办法让自己别忘了就行。
那万一离职了呢?别人忘记了呢?总归手动的不太靠谱哟!
AI 解析
国家发布的内容虽说比较好理解,但是程序不太好解析,不过在当下 AI 时代,丢给 AI 就可以了,我试了一下, kimi 解析的没问题。
kimi 的回答:
根据您提供的内容,以下是2024年的放假日期和调休日期的梳理:
元旦:
2024-01-01: 放假
春节:
2024-02-10: 放假
2024-02-11: 放假
2024-02-12: 放假
2024-02-13: 放假
2024-02-14: 放假
2024-02-15: 放假
2024-02-16: 放假
2024-02-17: 放假
2024-02-04: 调休
2024-02-18: 调休
清明节:
2024-04-04: 放假
2024-04-05: 放假
2024-04-06: 放假
2024-04-07: 调休
劳动节:
2024-05-01: 放假
2024-05-02: 放假
2024-05-03: 放假
2024-05-04: 放假
2024-05-05: 放假
2024-04-28: 调休
2024-05-11: 调休
端午节:
2024-06-10: 放假
中秋节:
2024-09-15: 放假
2024-09-16: 放假
2024-09-17: 放假
2024-09-14: 调休
国庆节:
2024-10-01: 放假
2024-10-02: 放假
2024-10-03: 放假
2024-10-04: 放假
2024-10-05: 放假
2024-10-06: 放假
2024-10-07: 放假
2024-09-29: 调休
2024-10-12: 调休
继续让其帮我转化为 json 格式
现在 AI 的解析理解能力还是不错的哈,当然,你不可能通过人为对话的方式获取解析的数据了,虽说也不是不行,但不还是人为的吗?AI 工具都提供有 API 可供调用,你可以尝试通过 API 的方式去发送数据,让其解析。
至于 API 怎么调,本文先不做探究了,后续再分享出来。
补充个额外话题:大家如果对 AI 感兴趣的话,可以来我加入的 AI 社群一起探索 AI 能力,说不定可以发掘人生的新赛道(根据个人需求进哈,毕竟也不便宜,还在涨价中……)。
开源实现
我们继续探~ 这个需求肯定是普遍的,看看有没有开源的吧,那去全球最大的同性交流社区 GitHub 搜一下吧!直接搜索 holiday
还是不少的!我们自己来甄别一下吧~ 挑一下靠谱的,也可以多找几个,做一下容灾处理,因为每年的数据只需要保存一次即可,也可以将别人的自动。
选了一个感觉还算靠谱的,分享一下吧,大家可以看一下它的源码,看看别人是怎么实现的。
https://github.com/NateScarlet/holiday-cn
这个怎么使用呢?数据是更新到 GitHub 仓库里的,可以通过获取 json 数据转存到自己的系统里使用以达到高可用或离线的效果,另外这个项目也可以直接部署到自己的集群机器中,自己维护。
获取数据的方式有多种:
1,通过 github 地址获取
https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/{年份}.json
eg:
https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2024.json
2,使用 JSDelivr
https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/{年份}.json
eg:
https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/2024.json
3,可尝试使用 ghproxy 或其他 Github 加速
https://{ghproxy服务}/https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/{年份}.json
eg:
https://ghproxy.net/https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/2024.json
4,将项目部署到自己的机器上
此项目的原理也比较简单,就是去定期抓取政府发布的文件,解析成标准的格式。
商业实现
我们当然不想使用付费的了,能省钱谁不愿意呢?不过有时候为了省事,我们还是会选择付费的模式的,我们了解一下别人怎么把一个东西做成收费的,也算开阔自己的视野吧。
市面上有很多提供这种工具辅助的 API 的网站,如快递查询,身份证信息查询,天气预报查询,有很多免费的资源,你把它进行整合整合,就可以发布给企业付费使用,或者免费提供当做引流方式也是不错的选择。
我搜到了这个 showapi 网站,上面刚好提供了,我们来看一眼吧。
这个我就不展开说了,点到为止吧,通过接口调用,然后把数据存起来就好了,或者每次用的时候来调一下也可以。
总结
本文由一个简单的需求【节假日判断】出发,探索了如何去根据一个需求去解决需求,并思考如何保障高可用,如何省钱,以及这个小需求是不是也能够实现商业变现的可能性,希望对大家有所帮助。
最后说一下我的选择吧,我是选择了使用 github 的开源实现,通过调用上面提到的获取数据方式中的 1-3 网址,为了增加容灾能力,会调 3 次,只要调成功一次即可跳出后续,调取成功后,将其存入自己的系统,并发出提醒,以便人工核查。
END
好了,今天的分享就到这里,欢迎到我的个人站点 huangyanxiang.com 或者 个人公&号:新质程序猿 查看更多内容。
感谢大家的阅读,如果有任何异议的地方,欢迎指正,一起交流!