繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM