0
my_date = datetime.now(pytz.timezone('US/Central'))

所以,我有一个日期my_date,我想检查这个日期时间对象是否是从 9 月 2 日那一周开始的交替星期二。所以如果my_date是第 4 个,它应该返回 true,第 11 个 false,第 18 个 true,等等。这将如何完成?

4

3 回答 3

1

这是一个解决方案,它计算给定月份的第一个星期二,并使用 datetime.isocalendar 获取周数并检查“alternate”

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
于 2018-09-06T16:35:13.723 回答
1

一种方法是

(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
于 2018-09-06T16:51:49.483 回答
0

这个问题最简单的解决方案应该是这样的。

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)这是您要开始的日期或第一个星期一的日期。

于 2020-06-01T12:16:20.560 回答