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
相关产品推荐
相关产品推荐

