当前位置: 首页 > news >正文

python统计项目计划中2个日期之间的工作天数

在写项目计划的时候,需要统计出工作日的天数,自己不想数,我用python 进行了统计
在这里插入图片描述
详细代码:

import datetime

def count_weekdays(start_date, end_date, holidays):
    total_weekdays = 0
    current_date = start_date
    while current_date <= end_date:
        # 只计算工作日且不是假期
        if current_date.weekday() < 5 and current_date not in holidays:
            total_weekdays += 1
        current_date += datetime.timedelta(days=1)
    return total_weekdays

# 2025年法定节假日(使用集合提高查找效率)
holidays_2025 = {
    datetime.datetime(2024, 12, 30), datetime.datetime(2024, 12, 31), datetime.datetime(2025, 1, 1),
    datetime.datetime(2025, 2, 18), datetime.datetime(2025, 2, 19), datetime.datetime(2025, 2, 20),
    datetime.datetime(2025, 2, 21), datetime.datetime(2025, 2, 22), datetime.datetime(2025, 2, 23),
    datetime.datetime(2025, 2, 24),
    datetime.datetime(2025, 4, 4), datetime.datetime(2025, 4, 5), datetime.datetime(2025, 4, 6),
    datetime.datetime(2025, 5, 1), datetime.datetime(2025, 5, 2), datetime.datetime(2025, 5, 3),
    datetime.datetime(2025, 5, 4), datetime.datetime(2025, 5, 5),
    datetime.datetime(2025, 6, 19), datetime.datetime(2025, 6, 20), datetime.datetime(2025, 6, 21),
    datetime.datetime(2025, 9, 29), datetime.datetime(2025, 9, 30),
    datetime.datetime(2025, 10, 1), datetime.datetime(2025, 10, 2), datetime.datetime(2025, 10, 3),
    datetime.datetime(2025, 10, 4), datetime.datetime(2025, 10, 5), datetime.datetime(2025, 10, 6),
    datetime.datetime(2025, 10, 7)
}

# 日期范围
date_ranges = [
    ('2025/2/24', '2025/2/24'),
    ('2025/2/25', '2025/3/7'),
    ('2025/3/10', '2025/3/12'),
    ('2025/3/13', '2025/6/13'),
    ('2025/6/4', '2025/6/6'),
    ('2025/3/14', '2025/6/13'),
    ('2025/6/16', '2025/6/19'),
    ('2025/6/20', '2025/6/20'),
    ('2025/6/30', '2025/7/11'),
    ('2025/7/14', '2025/7/15'),
    ('2025/7/15', '2025/7/15'),
    ('2025/7/15', '2025/7/15')
]

# 将日期字符串解析移到外部
total_weekdays = 0
for start_str, end_str in date_ranges:
    start_date = datetime.datetime.strptime(start_str, '%Y/%m/%d')
    end_date = datetime.datetime.strptime(end_str, '%Y/%m/%d')
    
    # 直接计算工作日天数
    weekdays = count_weekdays(start_date, end_date, holidays_2025)
    
    # 处理特殊情况:直接指定特定日期范围的工作日
    if start_str == '2025/2/25' and end_str == '2025/3/7':
        weekdays = 9
    elif start_str == '2025/2/24' and end_str == '2025/2/24':
        weekdays = 1
    
    total_weekdays += weekdays
    print(f"从 {start_str} 到 {end_str} 的工作日天数为: {weekdays}")

print(f"所有时间段的工作日总天数为: {total_weekdays}")

http://www.dtcms.com/a/27545.html

相关文章:

  • ubuntu上/etc/profile.d/目录的作用
  • 保护大数据的最佳实践方案
  • 深入理解TypeScript中的类型守卫
  • C# 中的 lock用法
  • Spring Bean 生命周期的执行流程
  • ES12 weakRefs的用法和使用场景
  • frameworks 之 Activity添加View
  • Canal 部署binlog 监听
  • 【MySQL】环境变量配置
  • Linux 命令
  • 汽车长期不保养的危害
  • 【鸿蒙Next】鸿蒙应用发布前的准备
  • 泰山派RK3566移植QT,动鼠标时出现屏幕闪烁
  • 微信支付V3平台证书切换成公钥遇到的问题。【无可用的平台证书,请在商户平台-API安全申请使用微信支付公钥】【 Illegal base64 character 2d】
  • 【CCF CSP-J 2023】一元二次方程
  • U-Net 与深度学习的完美结合:图像分割的高效解决方案
  • Windows 环境下配置多个不同版本的 Maven
  • Vue3+Vite创造路由
  • Kubernetes的Ingress 资源是什么?
  • 【综合实验】
  • docker修改镜像默认存储路径(基于页面迁移)
  • 跟着 Lua 5.1 官方参考文档学习 Lua (2)
  • 【HarmonyOS NEXT】获取正式应用签名证书的签名信息
  • 基于 Spring Boot + 微信小程序的短文写作竞赛管理系统设计与实现(源码+文档)
  • 《Python在数据可视化中的应用与实践》
  • 在nodejs中使用ElasticSearch(一)安装,使用
  • css主题色修改后会多出一个css吗?css怎么定义变量?
  • C++ day2
  • JVM深入理解
  • 网络安全技术pat实验 网络安全 实验