You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现按月返回指定日期(遇周末自动前置工作日)

解决方案:根据月份返回调整后的23日工作日

我来帮你实现这个需求,用Python的datetime模块就能轻松搞定。核心思路很清晰:先构造指定年月的23日日期,再判断它是否为周末,若是则向前调整到最近的工作日,最后返回(YYYY, MM, DD)格式的结果。

完整实现代码

import datetime

def get_adjusted_date(year, month):
    # 构造当月23日的日期对象
    target_date = datetime.date(year, month, 23)
    # 判断星期几:weekday()返回0=周一,5=周六,6=周日
    if target_date.weekday() == 5:  # 周六,往前推1天
        adjusted_date = target_date - datetime.timedelta(days=1)
    elif target_date.weekday() == 6:  # 周日,往前推2天
        adjusted_date = target_date - datetime.timedelta(days=2)
    else:  # 工作日,保持原日期
        adjusted_date = target_date
    # 返回(年, 月, 日)格式的元组
    return (adjusted_date.year, adjusted_date.month, adjusted_date.day)

# 测试2018年1-7月的情况
if __name__ == "__main__":
    year = 2018
    for month in range(1, 8):
        result = get_adjusted_date(year, month)
        print(f"{result[0]}, {result[1]}, {result[2]}")

代码说明

  • datetime.date(year, month, 23):直接构造目标月份的23日日期对象,不用手动拼接字符串或者处理日期格式问题。
  • weekday()方法:用来判断日期是周几,返回值范围是0(周一)到6(周日),比isoweekday()(1=周一,7=周日)更方便我们快速识别周末。
  • datetime.timedelta(days=N):用来计算日期偏移,这里根据周末类型分别减去1天或2天,精准得到最近的前一个工作日。

测试结果验证

运行上面的代码,你会得到和预期完全一致的输出:

2018, 1, 23
2018, 2, 23
2018, 3, 23
2018, 4, 23
2018, 5, 23
2018, 6, 22
2018, 7, 23

其中2018年6月23日是周六,所以自动调整为前一个工作日6月22日;其他月份的23日均为工作日,保持原日期不变。

如果需要处理后续年份和月份,只需要调用get_adjusted_date(year, month)传入对应的年份和月份即可,函数会自动处理所有周末调整的情况。

内容的提问来源于stack exchange,提问作者davdis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:15:21