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

本贴最后更新于 187 天前,其中的信息可能已经斗转星移

写了个小工具,自动按工作量排期,避开节假日和周末。输入任务的工作量,自动算好开始和结束时间后导出 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 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    554 引用 • 675 回帖 • 1 关注
  • 工具

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

    301 引用 • 768 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    86 引用 • 165 回帖 • 1 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 735 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 831 关注
  • 程序员

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

    591 引用 • 3528 回帖 • 2 关注
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    173 引用 • 414 回帖 • 360 关注
  • Swift

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

    34 引用 • 37 回帖 • 561 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 160 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    326 引用 • 1395 回帖 • 3 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 260 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    172 引用 • 1542 回帖
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 222 关注
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 310 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 80 关注
  • 导航

    各种网址链接、内容导航。

    45 引用 • 177 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    35 引用 • 468 回帖 • 762 关注
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 3 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 614 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 517 关注
  • Node.js

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

    139 引用 • 269 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    694 引用 • 537 回帖 • 1 关注
  • wolai

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

    2 引用 • 14 回帖
  • Sublime

    Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。

    10 引用 • 5 回帖
  • ZooKeeper

    ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 HBase 的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    61 引用 • 29 回帖 • 10 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 269 关注
  • danl
    181 关注
  • CodeMirror
    2 引用 • 17 回帖 • 174 关注