python cookbook 学习笔记 第三章 数字日期和时间(13) 计算最后一个周五的日期

本文介绍了一种使用Python的datetime模块计算特定星期几日期的方法,包括获取最近一个指定工作日的日期,如找到上一个周五的日期。同时,文章还提到了使用第三方包python-dateutil进行更复杂日期计算的可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 计算最后一个周五的日期
  • 问题:
    • 需要查找星期中某一天出现的日期,比如星期五。
  • 解决方案:
    • Python 的datetime 模块中有工具函数和类可以执行这样的计算,下面是一个通用的解决 方案:
from datetime import datetime, timedelta

weekdays = ["Monday", "Tuesday", "Wednesday",
            "Thursday", "Friday", "Saturday", "Sunday"]

def get_previous_byday(dayname, start_date= None):
    if start_date is None:
        start_date = datetime.today()
    day_num = start_date.weekday()
    day_num_target = weekdays.index(dayname)
    days_age = (7 + day_num - day_num_target)%7
    if days_age == 0:
        days_age =7
    target_date = start_date - timedelta(days= days_age)
    return target_date

datetime.today() # 2018-11-24 21:28:30.601299
get_previous_byday("Monday")  # 2018-11-19 21:29:20.514153
  • 可选的 start_date 参数可以由另外一个 datetime 实例来提供,比如:
get_previous_byday("Friday", datetime(2018, 11, 24))
# 2018-11-23 00:00:00
  • 讨论: 上面的算法原理是这样的:先将开始日期和目标日期映射到星期 list 的位置上。然 后通过模运算计算出目标日期要经过多少天能到达开始日期。然后用开始日期捡取那个时间差 就能得到结果日期。

  • 如果需要执行大量的日期计算的话,可以安装第三方包 python-dateutil 来代替。比如, 下面是使用 dateutil 模块中的 relativedelta() 函数执行同样的计算:

from dateutil.relativedelta import relativedelta
from dateutil.rrule import *

d = datetime.now()
print(d)  # 2018-11-24 21:45:48.590668

print(d + relativedelta(weekday=FR)) # 下星期五
# 2018-11-30 21:46:36.555411

print(d + relativedelta(weekday= FR(-1))) # 这个星期的星期五
# 2018-11-23 21:47:50.619647
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值