如何检查日期是否在下周,python



基本上,我想检查一个日期,例如20121-07-08,是在下一周,还是下一周,或者两者都不是。

#I can call the start and end dates of the current week
start = tday - timedelta(days=tday.weekday())
end = start + timedelta(days=6)
print("Today: " + str(tday))
print("Start: " + str(start))
print("End: " + str(end))
# and I can get the current week number. 
curr_week = datetime.date.today().strftime("%V")
print(curr_week)

有没有比在curr_week + 1中获取日期列表更好的方法,然后检查日期是否在该列表中?非常感谢

一般答案

最好坚持使用datetime和timedelta,因为这可以处理所有的边缘情况,如年份变化,53周的年份等。

查找下一周的周数,并与要检查的周数进行比较。

import datetime
# Date to check in date format:
check_date = datetime.datetime.strptime("2021-09-08", "%Y-%d-%m").date()
# Current week number:
curr_week = datetime.date.today().strftime("%V")
# number of next week
next_week = (datetime.date.today()+datetime.timedelta(weeks=1)).strftime("%V")
# number of the week after that
week_after_next_week = (datetime.date.today()+datetime.timedelta(weeks=2)).strftime("%V")

# Compare week numbers of next weeks to the week number of the date to check:
if next_week == check_date.strftime("%V"):
# Date is within next week, put code here
pass
elif week_after_next_week == check_date.strftime("%V"):
# Date is the week after next week, put code here
pass

老回答

这在年份变化时就会出现问题,而模数并不能解决这个问题,因为有些年份有53周。

可以通过将周数转换为整数来比较周数。你不需要创建一个下周所有日期的列表。

import datetime
# Date to check in date format:
check_date = datetime.datetime.strptime("2021-07-08", "%Y-%d-%m").date()
# Current week number, make it modulo so that the last week is week 0:
curr_week = int(datetime.date.today().strftime("%V"))
# Compare week numbers:
if curr_week == (int(check_date.strftime("%V"))-1):
# Date is within next week, put code here
pass
elif curr_week == (int(check_date.strftime("%V"))-2):
# Date is the week after next week, put code here
pass

您可以在datetime中强制转换要检查的日期,然后比较周数。

# date you want to check
date = datetime.datetime.strptime("2021-07-08","%Y-%m-%d")
# current date
tday = datetime.date.today()
# compare the weeks
print(date.strftime("%V"))
print(tday.strftime("%V"))
27
32

[查看Alfred的回答])

您可以直接从每个日期的IsoCalendarDate表示中以整数形式获得周数。

from datetime import datetime
date_format = '%Y-%m-%d'
t_now = datetime.strptime('2021-08-11', date_format)
target_date = datetime.strptime('2021-08-18', date_format)

仅使用datetime比较:

from datetime import datetime, timedelta

def in_next_week(date):
""" -1: before; 0: in; 1: after next week;"""
today = datetime.today()
this_monday = today.date() - timedelta(today.weekday())
start = this_monday + timedelta(weeks=1)
end = this_monday + timedelta(weeks=2)
return -1 if date < start else 0 if date < end else 1

测试用例:

for i in range(14):
dt = datetime.today().date() + timedelta(days=i)
print(dt, in_next_week(dt))

相关内容

  • 没有找到相关文章

最新更新