美文网首页
Python3 - 计算最后一个周五的日期

Python3 - 计算最后一个周五的日期

作者: 惑也 | 来源:发表于2018-12-20 23:10 被阅读73次

    问题

    需要查找星期中某一天最后出现的日期,比如星期五。

    解决方案

    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_ago = (7 + day_num - day_num_target) % 7
        if days_ago == 0:
            days_ago = 7
        targe_date = start_date - timedelta(days=days_ago)
        return targe_date
    

    在交互式解释器中使用如下:

    print(datetime.today())
    print(get_previous_byday('Monday'))
    print(get_previous_byday('Saturday'))
    
    2018-12-20 23:07:17.103284
    2018-12-17 23:07:17.103327
    2018-12-15 23:07:17.103350
    

    可选的 start_date 参数可以由另外一个 datetime 实例来提供。比如:

    print(get_previous_byday('Tuesday', datetime(2018, 12, 15)))
    2018-12-11 00:00:00
    

    讨论

    上面的算法原理:先将开始日期和目标日期映射到星期数组的位置上(星期一索引为0), 然后通过模运算计算出目标日期要经过多少天才能到达开始日期。然后用开始日期减去那个时间差即得到结果日期。

    相关文章

      网友评论

          本文标题:Python3 - 计算最后一个周五的日期

          本文链接:https://www.haomeiwen.com/subject/ipxpkqtx.html