自动按工作量排期,避开 2025 年节假日和周末

写了个小工具,自动按工作量排期,避开节假日和周末。输入任务的工作量,自动算好开始和结束时间后导出 csv

效果如下:

|    |   工作量 | 计划开始时间   | 计划结束时间   |
|----|---------|----------------|----------------|
|  0 |       3 | 2025/04/02     | 2025/04/07     |
|  1 |       4 | 2025/04/08     | 2025/04/11     |
|  2 |       1 | 2025/04/14     | 2025/04/14     |
|  3 |       1 | 2025/04/15     | 2025/04/15     |

代码如下:

from datetime import datetime, timedelta
import pandas as pd
from tabulate import tabulate

# 定义 2025 年的节假日
HOLIDAYS_2025 = [
    # 元旦
    datetime(2025, 1, 1),
    # 春节
    datetime(2025, 1, 28), datetime(2025, 1, 29), datetime(2025, 1, 30), datetime(2025, 1, 31), datetime(2025, 2, 1),
    datetime(2025, 2, 2), datetime(2025, 2, 3), datetime(2025, 2, 4),
    # 清明节
    datetime(2025, 4, 4), datetime(2025, 4, 5), datetime(2025, 4, 6),
    # 劳动节
    datetime(2025, 5, 1), datetime(2025, 5, 2), datetime(2025, 5, 3), datetime(2025, 5, 4), datetime(2025, 5, 5),
    # 端午节
    datetime(2025, 5, 31), datetime(2025, 6, 1), datetime(2025, 6, 2),
    # 国庆节
    datetime(2025, 10, 1), datetime(2025, 10, 2), datetime(2025, 10, 3), datetime(2025, 10, 4), datetime(2025, 10, 5),
    datetime(2025, 10, 6), datetime(2025, 10, 7), datetime(2025, 10, 8)
]


# 判断是否为工作日(非周末且非假期)
def is_working_day(date):
    return date.weekday() < 5 and date not in HOLIDAYS_2025


# 定义任务调度逻辑
def schedule_tasks(tasks, start_date):
    schedule = []
    current_date = start_date

    for workload in tasks:
        # 确保任务的开始时间是工作日
        while not is_working_day(current_date):
            current_date += timedelta(days=1)
        start = current_date

        # 分配工作量
        days_needed = workload
        while days_needed > 0:
            if is_working_day(current_date):
                days_needed -= 1
            if days_needed > 0:  # 确保任务未完成时才推进日期
                current_date += timedelta(days=1)

        # 确定结束时间
        end = current_date
        while not is_working_day(end):  # 校正为工作日
            end += timedelta(days=1)

        # 保存当前任务的计划
        schedule.append({
            "工作量": workload,
            "计划开始时间": start.strftime("%Y/%m/%d"),
            "计划结束时间": end.strftime("%Y/%m/%d")
        })

        # 确保下一任务的开始时间从有效的工作日开始
        current_date = end + timedelta(days=1)
        while not is_working_day(current_date):
            current_date += timedelta(days=1)

    return schedule


# 示例任务和起始日期
tasks = [3, 4, 1, 1]
# tasks = [2, 2, 2, 2, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2, 3, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
#          3, 2, 2, 2, 2, 4, 4, 2, 4, 2, 8, 6, 2, 4, 3, 2, 3]
# tasks = [2, 2, 1, 3, 2, 2, 4, 8, 4, 2, 8, 2, 2, 8, 2]
start_date = datetime.strptime("2025-04-02", "%Y-%m-%d")
schedule = schedule_tasks(tasks, start_date)
schedule_df = pd.DataFrame(schedule)
schedule_df.to_csv('schedule.csv', index=False, encoding='utf-8-sig')
# print(schedule_df)
# 打印调度结果为 Markdown 格式
print(tabulate(schedule, headers="keys", tablefmt="github", showindex=True))
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    548 引用 • 674 回帖
  • 工具

    子曰:“工欲善其事,必先利其器。”

    292 引用 • 738 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    265 引用 • 666 回帖 • 2 关注
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 399 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 159 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    150 引用 • 257 回帖 • 1 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 537 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 554 关注
  • WebComponents

    Web Components 是 W3C 定义的标准,它给了前端开发者扩展浏览器标签的能力,可以方便地定制可复用组件,更好的进行模块化开发,解放了前端开发者的生产力。

    1 引用 • 6 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    111 引用 • 54 回帖 • 2 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 791 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    166 引用 • 595 回帖
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    26 引用 • 196 回帖 • 24 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    578 引用 • 3534 回帖
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 1 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖 • 9 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 724 回帖
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 26 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 37 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    223 引用 • 474 回帖 • 1 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 1 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    87 引用 • 139 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 374 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 70 关注
  • Unity

    Unity 是由 Unity Technologies 开发的一个让开发者可以轻松创建诸如 2D、3D 多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

    25 引用 • 7 回帖 • 153 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    6 引用 • 14 回帖
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注