如何使用 Python 确定上周五的日期?
在本文中,我们将学习如何使用 Python 确定上周五的日期。
使用的方法
以下是完成此任务的各种方法 -
使用 datetime 模块
使用 dateutil 包
方法 1:使用 Datetime 模块
算法(步骤)
以下是执行所需任务要遵循的算法/步骤。 −
使用 import 关键字从 datetime 模块导入 datetime、timedelta。
创建一个变量来存储一周内所有日子的列表(工作日)。
创建一个函数 getPreviousByDay(),通过接受输入日期 start_date=None 作为参数来返回输入日期的最后一个工作日
使用 if 条件 语句检查开始日期是否为 None。
将今天的日期(当前日期)分配给开始日期。
使用 datetime 模块的 weekday() 函数(返回与给定星期几相对应的整数)获取当前工作日数。
使用 index() 函数获取目标星期几(给定输入日期)的索引。
获取上一周的天数。
使用 if 条件 语句检查上述 days ago 变量结果是否等于 0,然后将 7 分配给 days ago 变量。
否则从当前日期(开始日期)中减去上述天数,以获取给定日期的最后一周日期
返回输入日期的最后一周日期。
使用 datetime 的 today() 函数打印今天/当前的日期和时间。
通过调用上面定义的 getPreviousByDay() 函数,将 inputDay 传递为"Friday",打印上一个星期五的日期参数。
以同样的方式通过将输入日期作为"星期一"和"星期三"传递给 getPreviousByDay() 函数来打印上一个星期一、星期三的日期。
示例
以下程序使用datetime 模块返回确定上周五/任何一天的日期 -
# 从 datetime 模块导入 datetime、timedelta from datetime import datetime, timedelta # 一周中的日子列表 weekdaysList = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日'] # 创建一个函数,通过接受输入返回输入日的最后一个工作日 # day, start_date=None 作为参数 def getPreviousByDay(inputDay, start_date=None): # 检查开始日期是否为 None if start_date is None: # 将今天的日期(当前日期)分配给开始日期 start_date = datetime.today() # 获取星期几 dayNumber = start_date.weekday() # 获取目标星期几的索引 dayNumberTarget = weekdaysList.index(inputDay) # 获取最后一个星期几 daysAgo = (7 + dayNumber - dayNumberTarget) % 7 # 检查上述天前结果是否等于 0 if daysAgo == 0: # 将 7 分配给天前 daysAgo = 7 # 从当前日期(开始日期)中减去上述天数 # 获取给定日期的最后一周日期 targetDate = start_date - timedelta(days=daysAgo) # 返回输入日期的最后一周日期 return targetDate # 打印今天/当前的日期和时间 print("当前日期和时间:", datetime.today()) # 通过调用上面定义的 getPreviousByDay() 函数打印上一个星期五的日期 # 通过将 inputDay 传递为 'Friday' 作为参数来打印上一个星期五的日期 print("上一个星期五的日期:", getPreviousByDay('Friday')) # 打印上一个星期一的日期 print("上一个星期一的日期:", getPreviousByDay('Monday')) # 打印上一个星期三的日期 print("上一个星期三的日期:", getPreviousByDay('Wednesday'))
输出
执行时,上述程序将生成以下输出 -
当前日期和时间:2023-01-01 08:15:35.935826 上一个星期五的日期: 2022-12-30 08:15:35.936020 上一个星期一的日期:2022-12-26 08:15:35.936153 上一个星期三的日期:2022-12-28 08:15:35.936264
方法 2:使用 Dateutil 包
在此代码中,开始日期和目标日期映射到其在星期中的相应数字位置(星期一为0天)。然后,为了确定自目标日期上次发生以来已经过去了多少天,我们采用模块化算法。
然后通过从适当的 timedelta 实例中减去开始日期来确定目标日期。
如果您经常运行这样的日期计算,最好安装 python-dateutil 包。
以下是使用 dateutil 的 relativedelta() 函数进行相同计算的示例。
dateutil.relativedelta.relativedelta 增加了对以年、月、周或天定义的期间的支持,以及定义年、月或天的绝对值的能力,而 timedelta 仅支持天(和周)。
示例
以下程序使用 dateutil 模块返回确定上周五和下周五的日期−
# 从 datetime 模块导入 datetime 从 datetime 导入 datetime # 从 dateutil 模块导入 relationdelta 从 dateutil.relativedelta 导入 relationdelta 从 dateutil.rrule 导入 * # 将开始日期作为当前日期 start_date = datetime.now() # 打印今天/当前日期和时间 print("当前日期:", start_date) # 打印下一个星期五的日期 print("下一个星期五的日期:", start_date + relationdelta(weekday=FR)) # 打印上一个星期五的日期 print("上一个星期五的日期:", start_date + relationdelta(weekday=FR(-1)))
输出
执行时,上述程序将生成以下输出 -
当前日期:2023-01-15 08:19:49.267666 下一个星期五日期:2023-01-20 08:19:49.267666 上一个星期五日期:2023-01-13 08:19:49.267666
结论
在本文中,我们学习了如何使用两种不同的方法在 Python 中获取上一个星期五的日期。我们还实践了如何获取给定输入日的最后一个工作日以及如何检索给定日的下一个工作日。