Python 如何确定上个星期五的日期
在本文中,我们将学习如何使用Python确定上个星期五的日期。
使用的方法
以下是实现此任务的各种方法:
- 使用datetime模块
-
使用dateutil包
方法1:使用Datetime模块
步骤
以下是执行所需任务的算法/步骤:
- 使用import关键字从datetime模块导入datetime、timedelta。
-
创建一个变量来存储一周中所有天的列表(weekdays)。
-
创建一个函数getPreviousByDay()来返回输入日期的上一个工作日,接受输入日期和start_date=None作为参数。
-
使用if条件语句检查start_date是否为None。
-
将今天的日期(当前日期)赋值给start_date。
-
使用datetime模块的weekday()函数(返回与给定日期对应的整数)获取当前工作日编号。
-
使用index()函数获取目标工作日(给定输入日期)的索引。
-
获取上周的天数。
-
使用if条件语句检查上面的days ago变量结果是否等于0,然后将7赋值给days ago变量。
-
否则,从当前日期(start_date)中减去上面的天数,以获取上周的日期。
-
返回输入日期的上周日期。
-
使用datetime的today()函数打印今天/当前日期和时间。
-
通过调用上述定义的getPreviousByDay()函数并将inputDay设置为’星期五’作为参数,打印上个星期五的日期。
-
以相同的方式,通过将输入日期设置为’星期一’和’星期三’并将其传递给getPreviousByDay()函数,打印上个星期一和星期三的日期。
示例
以下程序使用datetime模块返回确定上个星期五/任何日期的日期。
# importing datetime, timedelta from datetime module
from datetime import datetime, timedelta
# list of days in a week
weekdaysList = ['Monday', 'Tuesday', 'Wednesday', 'Thursday',
'Friday', 'Saturday', 'Sunday']
# creating a function to return the last weekday of input day by
# accepting the input day, start_date=None as arguments
def getPreviousByDay(inputDay, start_date=None):
# check whether the start date is None
if start_date is None:
# assiging today's date(current date) to the start date
start_date = datetime.today()
# getting the weekday number
dayNumber = start_date.weekday()
# Get the index of the target weekday
dayNumberTarget = weekdaysList.index(inputDay)
# getting the last weekday
daysAgo = (7 + dayNumber - dayNumberTarget) % 7
# checking whether the above days ago result is equal to 0
if daysAgo == 0:
# assigning 7 to the days ago
daysAgo = 7
# Subtract the above number of days from the current date(start date)
# to get the last week's date of the given day
targetDate = start_date - timedelta(days=daysAgo)
# returning the last week's date of the input date
return targetDate
# printing today's/current date and time
print("Current date and time:", datetime.today())
# printing the last Friday date by calling the above defined
# getPreviousByDay() function by passing inputDay as 'Friday' as an argument
print("Last Friday Date:", getPreviousByDay('Friday'))
# printing the last Monday date
print("Last Monday Date:", getPreviousByDay('Monday'))
# printing the last Wednesday date
print("Last Wednesday Date:", getPreviousByDay('Wednesday'))
输出
执行上述程序后,将生成以下输出 −
Current date and time: 2023-01-01 08:15:35.935826
Last Friday Date: 2022-12-30 08:15:35.936020
Last Monday Date: 2022-12-26 08:15:35.936153
Last Wednesday Date: 2022-12-28 08:15:35.936264
方法2:使用Dateutil包
在此代码中,将”开始日期”和”目标日期”映射到它们在这一周中相应的数值位置上(星期一作为第0天)。然后,使用模运算来确定距离”目标日期”上次发生的天数。
然后,通过从适当的timedelta实例中减去开始日期来确定目标日期。
如果您经常运行类似的日期计算,安装”python-dateutil”包可能更合适。
下面是使用dateutil的”relativedelta()”函数进行相同计算的示例。
dateutil.relativedelta.relativedelta支持按年、月、周或天定义的时间段,以及定义年、月或日的绝对值,而timedelta仅支持天(和周)。
示例
以下程序返回使用”dateutil模块”确定的上周五和下周五的日期。
# importing datetime from datetime module
from datetime import datetime
# importing relativedelta from dateutil module
from dateutil.relativedelta import relativedelta
from dateutil.rrule import *
# taking the start date as the current date
start_date = datetime.now()
# printing the todays/current date and time
print("Current Date:", start_date)
# printing the Next Friday date
print("Next Friday Date:", start_date + relativedelta(weekday=FR))
# printing the Last Friday date
print("Last Friday Date:", start_date + relativedelta(weekday=FR(-1)))
输出
执行上述程序后,将生成以下输出:
Current Date: 2023-01-15 08:19:49.267666
Next Friday Date: 2023-01-20 08:19:49.267666
Last Friday Date: 2023-01-13 08:19:49.267666
结论
在本文中,我们学习了如何使用两种不同的方法在Python中获取上个星期五的日期。我们还实践了如何获取给定输入日期的上一个工作日,以及如何获取给定日期的下一个工作日。