python检查从特定的d开始的交替星期一

2024-04-20 13:28:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

所以,我有一个datemy_date,我想检查这个datetime对象是否是从9月2日开始的一周的交替星期二。因此,如果my_date是第4个,它应该返回true、11th false、18th true等。。怎么做


Tags: 对象falsetruedatetimedatemynowus
2条回答

下面是一个解决方案,它计算给定月份的第一个星期二,并使用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

一种方法是

(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

相关问题 更多 >