[英]python check for alternating monday starting on certain date
my_date = datetime.now(pytz.timezone('US/Central'))
所以,我有一个日期my_date
,我想检查这个日期时间对象是否是从 9 月 2 日那一周开始的交替星期二。 因此,如果my_date
是第 4 个,它应该返回 true、第 11 个 false、第 18 个 true 等等。这将如何完成?
这是一个解决方案,它计算给定月份的第一个星期二,并使用 datetime.isocalendar 获取周数并检查“替代”
from datetime import datetime, date, timedelta
def first_tuesday_of_month(year, month):
first_day_of_month = datetime(year, month, 1)
days_diff = ((1 - first_day_of_month.weekday()) + 7) % 7
first_tuesday_of_month = first_day_of_month + timedelta(days=days_diff)
return first_tuesday_of_month
def is_alternate_tuesday(starting_day, date_to_check):
# First check if the date is a Tuesday after the starting_day
if date_to_check < starting_day or date_to_check.weekday() != 1:
return False
# Ok, let's check if it's an "alternate week"
base_week = starting_day.isocalendar()[1]
checked_week = week_to_check = date_to_check.isocalendar()[1]
return (checked_week - base_week) % 2 == 0
base_day = first_tuesday_of_month(2018, 9)
assert is_alternate_tuesday(base_day , datetime(2018, 9, 4)) is True
assert is_alternate_tuesday(starting_day, datetime(2018, 9, 11)) is False
assert is_alternate_tuesday(starting_day, datetime(2018, 9, 18)) is True
一种方法是
(test_date-datetime.date(2018, 9, 4)).days %14 ==0
如果是在同一年内,你也可以使用
(test_date.isocalendar()[1]- datetime.date(2018, 9, 4).isocalendar()[1] %2) == 0 and test_date.isocalendar()[2]==2
这个问题的最简单的解决方案应该是这样的。
if datetime.date.today() in [datetime.date(2020, 6, 1) + timedelta(x) for x in range(14, 365, 14)]:
print "This day is alternate Monday"
else:
print "This is not"
这里datetime.date.today()
是您要检查它是否为替代星期一的日期。 datetime.date(2020, 6, 1)
这是您要开始的日期或第一个星期一的日期。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.