Python实现求解上个工作日逻辑

目录

      • 一、需求描述
      • 二、代码实现
      • 三、测试结果

一、需求描述

因工作需要,现需获取任意一个日期的上个工作日,要求考虑法定假日及周末。

例如:2024年2月10日(春节)的上一个工作日为2024年2月9日,2024年2月17日的上一个工作日仍为2024年2月9日,而2024年2月18日的上一个工作日为2月17日,以此类推

二、代码实现

# 获取上个工作日逻辑,包含节假日、调休逻辑
import datetime
import pandas as pd 
import chinese_calendar 

def get_last_workday(today):
    """
    获取上一个工作日的年月日字符串
    """
    weekday = today.weekday()

    # 如果今天是周天,上一个工作日是上周五;如果周六补班,上个工作日则是周六
    if weekday == 6:
        last_workday = today - datetime.timedelta(days=1)
        # 周六不上班则上个工作日为周五
        if chinese_calendar.is_holiday(last_workday): 
            last_workday -= datetime.timedelta(days=1)
        else:
            last_workday = today - datetime.timedelta(days=1) #不变
    else:
        # 否则,上一个工作日就是昨天
        last_workday = today - datetime.timedelta(days=1)

    # 如果上一个工作日是法定节假日,则调整为法定节假日结束后的第一个工作日
    while chinese_calendar.is_holiday(last_workday):
        last_workday -= datetime.timedelta(days=1)
    return last_workday.strftime('%Y-%m-%d')


def get_date_df(dates,last_workday_list):
    '''
    输出最终24年每天的对应上个工作日,以及当天的工作日标签
    '''
    date_df = pd.concat([pd.Series(dates),pd.Series(lastwork_day_list)],axis=1)
    date_df.columns = ['sc_date','last_work_day']
    date_df['is_workday'] = pd.Series(map(lambda x:1 if chinese_calendar.is_workday(x) else 0,dates))
    date_df ['sc_date'] = date_df['sc_date'].apply(lambda x:x.strftime('%Y-%m-%d'))
    return date_df 

if __name__ == '__main__':
    # 获取日期数据
    dates = pd.date_range(start='2024-01-01', end='2024-12-31')
    lastwork_day_list = list(map(get_last_workday,dates))
    data1 = get_date_df(dates,lastwork_day_list)

data1

输出结果如下,生成三列数据:第一列为2024年每天日期,第二列为其对应的上个工作日,第三列为是否为工作日标签

三、测试结果

以春节假期为例,分别取节中,节后的上个工作日,其对应的均是2月9日,而节后第二天的上个工作日则为2月18日;再以普通工作日2月26日(周一)为例,上个工作日则为2月23日(周五),验证结果均正确
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】数组中出现次数超过一半的数字

代码&#xff1a; class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param numbers int整型vector * return int整型*/int MoreThanHalfNum_Solution(vector<int>& numbers) {int …

spring学习笔记-IOC,AOP,事务管理

目录 概述 什么是spring 侵入式的概念 spring的核心 spring的优势 注意 IOC控制反转 概述 核心 容器 DI&#xff0c;dependency injection依赖注入 概念 注入方式 循环依赖 spring如何解决循环依赖 spring生成Bean的方式 Bean属性注入&#xff08;Bean属性赋值…

如何用Postman做接口自动化测试?一文带你学会

什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。 例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来 本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已经开发完成的用…

MoveIt 机械臂运动 学习 01-MoveIt 初次见面

ROS中有针对机器人进行移动操作的一套工具——MoveIt&#xff01;。在主页http://moveit.ros.org 上 包含使用MoveIt&#xff01;的文档、教程、安装说明以及多种机械臂&#xff08;或机器人&#xff09;的示例演示&#xff0c;如一些 移动操作任务&#xff0c;包括抓握、拾取和…

鸿蒙4.0真机调试踩坑

传言鸿蒙next版本将不再兼容Android&#xff0c;所以领导安排做下鸿蒙开发的调研工作。 鸿蒙开发指南其实已经非常的友好了。但是鸿蒙开发本身还是有些坑要踩&#xff0c;这篇文章主要讲了鸿蒙真机调试问题。 目前手上的真机为华为 nova6&#xff0c;处理器为麒麟990.鸿蒙系统…

AI换脸的一种技术实施例

刚刚看一个帖子的时候发现了AI识别中一个可以利用到其它场景的的一个通用处理步骤&#xff1a;人脸矫正。 人脸识别过程&#xff1a; 1.首先识别到关键的人脸部分&#xff0c;经过一个粗筛过程&#xff0c;把目标物的脸部图样先抓出来。 2.然后&#xff0c;因为人脸的水平&…

vue3基础学习(上)

##以前怎么玩的? ###MVC Model:Bean View:视图 Controller ##vue的ref reactive ref:必须是简单类型 reactive:必须不能是简单类型 ###创建一个Vue项目 npm init vuelatest ###生命周期 ###setup相关 ####Vue2的一些写法 -- options API ####Vue3的写法 组合式API Vu…

好用且强大——JNPF永远的神

一款开源且强大的工具 风流数年&#xff0c;只看今朝&#xff0c;Linux 让我们看到了开源驱动下的生产力&#xff0c;其实低代码和它一样&#xff0c;都是提高效率、降低成本的工具。 近 10 年间&#xff0c;JNPF 低代码平台如火如荼的发展起来&#xff0c;堪称黑马也不为过。这…

借助拧紧曲线高效管理螺栓装配防错——SunTorque智能扭矩系统

拧紧曲线作为拧紧质量的“晴雨表”&#xff0c;在拧紧过程中&#xff0c;能够实时探知到拧紧状态是否存在异常&#xff0c;并根据曲线特质推测出拧紧过程中遇到了什么样的问题&#xff0c;今天SunTorque智能扭矩系统带您了解拧紧曲线在螺栓装配防错管理中如何发挥作用。 合格的…

网络和Linux网络_2(套接字编程)socket+UDP网络通信代码

目录 1. 预备知识 1.1 源IP地址和目的IP地址 1.2 端口号port和套接字socket 1.3 网络通信的本质 1.4 TCP和UDP协议 1.5 网络字节序 2. socket套接字 2.1 socket创建套接字 2.2 bind绑定 2.3 sockaddr结构体 3. UDP网络编程 3.1 server的初始化服务器 3.2 server的…

Java小游戏之——贪吃蛇

今天详细讲解写贪吃蛇的遇到的问题 代码&#xff1a; Main类 GrameStart类 GamePanel类 启动main方法 在写贪吃蛇的时候&#xff0c;我接触到了两个新东西&#xff1a; 1.定时器Timer类。 2.paint&#xff08;&#xff09;绘图方法。第一次出现在java.awt.Component类中&…

云性能监控的五大重要性

在当今数字化时代&#xff0c;企业越来越依赖云服务来支持其IT基础设施和业务运营。为了确保这些云服务的稳定性和性能&#xff0c;云性能监控变得至关重要。本文将探讨云性能监控的重要性。 一、实时可见性 云性能监控提供了对云基础设施和应用程序性能的实时可见性。这意味着…

探索arkui(2)--- 布局(列表)--- 1(列表数据的展示)

前端开发布局是指前端开发人员宣布他们开发的新网站或应用程序正式上线的活动。在前端开发布局中&#xff0c;开发人员通常会展示新网站或应用程序的设计、功能和用户体验&#xff0c;并向公众宣传新产品的特点和优势。前端开发布局通常是前端开发领域的重要事件&#xff0c;吸…

【LeetCode刷题-滑动窗口】--487.最大连续1的个数II

487.最大连续1的个数II 方法&#xff1a;滑动窗口 维护一个区间&#xff0c;使得该区间中只包含一个0 class Solution {public int findMaxConsecutiveOnes(int[] nums) {int n nums.length;int left 0,right 0,sum 0;int zero 0; //计算0的个数while(right < n){if(…

基于JavaWeb+SpringBoot+Vue房屋租赁系统微信小程序系统的设计和实现

基于JavaWebSpringBootVue房屋租赁系统微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 21世纪是信息的时代&#xff0c;是网络的时代&#xff0c;进入信息社会高速…

(C++)把字符串转换成整数

把字符串转换成整数_牛客题霸_牛客网 愿所有美好如期而遇 思路 看到这个题目我们首先应该想到的就是去处理第一个字符&#xff0c;但是第一个字符也可能是数字字符&#xff0c;所以我们需要对他单独处理&#xff0c;如果他不符合条件&#xff0c;直接return&#xff0c;符合条…

java实现钉钉机器人消息推送

项目开发中需要用到钉钉机器人发送任务状态&#xff0c;本来想单独做一个功能就好&#xff0c;但是想着公司用到钉钉机器人发送项目挺多的。所以把这个钉钉机器人抽离成一个组件发布到企业maven仓库&#xff0c;这样可以给其他同事用提高工作效率。 1.目录结构 2.用抽象类&…

C语言加密字符(ZZULIOJ1064:加密字符)

题目描述 从键盘输入一批字符&#xff0c;以结束&#xff0c;按要求加密并输出。 输入&#xff1a;从键盘输入一批字符&#xff0c;占一行&#xff0c;以结束。 输出&#xff1a;输出占一行 加密规则: 1&#xff09;所有字母均转换为小写。 2&#xff09;若是字母a到y&#xff…

系列七、JVM的内存结构【堆(Heap)】

一、概述 一个JVM实例只存在一个堆内存&#xff0c;堆内存的大小是可以手动调节的。类加载器读取了类文件后&#xff0c;需要把类、方法、常变量放到堆内存中&#xff0c;保存所有引用类型的真实信息&#xff0c;以方便执行器执行&#xff0c;堆内存分为三个部分&#xff0c;即…