美文网首页
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 - 计算最后一个周五的日期

    问题 需要查找星期中某一天最后出现的日期,比如星期五。 解决方案 Python的 datetime 模块中有工具函...

  • Python3 - 计算当前月份的日期范围

    问题 代码需要在当前月份中循环每一天,找到一个计算这个日期范围的高效方法。 解决方案 需要事先构造一个包含所有日期...

  • 日期的计算

    iOS - 获取当前日期的前几个月或后几个月[https://www.jianshu.com/p/944b8fe7...

  • 计算日期

    function ChooseType(date, n) { var str = date; // 转换文本的日期...

  • Python标准库之time和datetime

    1、python3日期和时间 Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。 Pyt...

  • macOS date 随意自定义输出日期

    这里将一些date命令的高级应用date命令简单介绍。 计算当月的第一天的日期 计算当月的最后一天的日期 执行结果...

  • N天前日期计算

    批处理计算日期的方法 用获取到的年、月、日,进行计算 问题: 只支持一个月以内的日期计算。

  • python3 numpy模块

    python3 numpy模块 什么是numpy? 一个在Python中做科学计算的基础库,重在数值计算,也是大部...

  • iOS计算N个工作日之后的日期和计算N个月之后的日期

    项目需要 计算3个工作日之后的日期和N(用户输入)个月之后的日期 先看计算N个月之后的日期 如果需要计算的日期的前...

  • 【MySQL】的日期计算

    数据分析写起sql真的很烦啊。尤其是遇到各种日期计算。这里总结了一些MySQL中的常用日期计算,希望给和我一样的s...

网友评论

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

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