如何使用Python确定上个星期五的日期?
在本文中,我们将学习如何使用Python确定上个星期五的日期。
使用的方法
以下是完成此任务的各种方法。
-
使用datetime模块
-
使用dateutil包
方法1:使用Datetime模块
算法(步骤)
以下是执行所需任务所需遵循的算法/步骤。
-
使用import关键字从datetime模块导入datetime,timedelta。
-
创建一个变量来存储一周中所有天的列表(weekdays)。
-
创建一个函数getPreviousByDay(),通过接受输入日,start_date = None作为参数返回输入日的上一个工作日。
-
使用if条件语句检查起始日期是否为None。
-
将今天的日期(当前日期)分配给起始日期。
-
使用datetime模块的weekday()函数(返回对应于星期几的整数)获取当前星期几的编号。
-
使用index()函数获取目标星期几(给定输入日)的索引。
-
获取从上周开始数的天数。
-
使用if条件语句检查上述天数是否为0,然后将7分配给days ago变量。
-
否则,从当前日期(起始日期)减去上述天数,以获取给定日上一周的日期。
-
返回输入日期上一周的日期。
-
使用datetime的today()函数打印今天/当前的日期和时间。
-
通过将输入日设置为“星期五”作为参数调用上述定义的getPreviousByDay()函数来打印上一个星期五的日期。
-
通过将输入日期设置为“星期一”和“星期三”,通过调用getPreviousByDay()函数来打印上周一和上周三的日期。
示例
以下程序使用datetime模块返回确定上周五/任何日日期。
# 从datetime模块导入datetime和timedelta
from datetime import datetime, timedelta
# 一周的日期列表
weekdaysList = ['Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday', 'Sunday']
# 创建一个函数,接收输入日期和开始日期为参数,返回输入日期上一周的最后一个指定星期几的日期
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
# 检查上面的daysAgo结果是否等于0
if daysAgo == 0:
# 将daysAgo赋值为7
daysAgo = 7
# 从当前日期(开始日期)中减去上面的天数,以获取给定日期上一周的日期
targetDate = start_date - timedelta(days=daysAgo)
# 返回输入日期上一周的最后一个指定星期几的日期
return targetDate
# 打印今天/当前的日期和时间
print("当前的日期和时间:", datetime.today())
# 调用上面定义的getPreviousByDay()函数,将输入日期指定为'星期五',并打印上一周的星期五日期
print("上一周的星期五日期:", getPreviousByDay('星期五'))
# 打印上一周的星期一日期
print("上一周的星期一日期:", getPreviousByDay('星期一'))
# 打印上一周的星期三日期
print("上一周的星期三日期:", getPreviousByDay('星期三'))
输出
在执行上述程序后,将生成以下输出 ŌłÆ
当前的日期和时间: 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
from datetime import datetime
# 从dateutil模块中导入relativedelta
from dateutil.relativedelta import relativedelta
from dateutil.rrule import *
# 将开始日期设为当前日期
start_date = datetime.now()
# 打印当前日期和时间
print("当前日期:", start_date)
# 打印下个星期五的日期
print("下个星期五的日期:", start_date + relativedelta(weekday=FR))
# 打印上周五的日期
print("上周星期五的日期:", start_date + relativedelta(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中获取上个星期五的日期。我们还实践了如何获取给定输入日期的上一个工作日以及如何检索给定日期的下一个工作日。