当前位置: 首页 > 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}")

相关文章:

  • 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 资源是什么?
  • 【综合实验】
  • 长三角铁路今日预计发送390万人次,昨日客发量同比增长10.5%
  • 马克思主义理论研究教学名师系列访谈|薛念文:回应时代课题,才能彰显强大生命力
  • 人民日报今日谈:为何重视这个“一体化”
  • “五一”看什么?这里有一份申城视听指南
  • 当农民跨进流动的世界|劳动者的书信①
  • 全文丨中华人民共和国民营经济促进法