找到3月22日星期二的年份

时间:2017-06-08 11:10:31

标签: python python-3.x datetime

我需要了解2017年至2100年(包括两者)的哪些年份将在3月22日为星期二。

我尝试使用datetime模块,但我无法弄清楚如何......

4 个答案:

答案 0 :(得分:5)

使用 calendar 模块:

>>> import calendar
>>> [year for year in range(2017, 2101) if calendar.weekday(year, 3, 22) == calendar.TUESDAY]
[2022, 2033, 2039, 2044, 2050, 2061, 2067, 2072, 2078, 2089, 2095]

答案 1 :(得分:1)

您可以使用datetime模块中的isoweekday

import datetime

for year in range(2017, 2101):
    if datetime.date(year, 3, 22).isoweekday() == 2:  # 2 is Tuesday
        print(year)

weekday

import datetime

for year in range(2017, 2101):
    if datetime.date(year, 3, 22).weekday() == 1:  # now 1 is Tuesday
        print(year)

您还可以使用理解来将它们收集在列表中:

>>> [year for year in range(2017, 2101) if datetime.date(year, 3, 22).isoweekday() == 2]
[2022, 2033, 2039, 2044, 2050, 2061, 2067, 2072, 2078, 2089, 2095]

答案 2 :(得分:1)

派对有点晚了,但是如何使用数学而不是构建数百个datetime.datetime对象只是为了扔掉它们?

# adjusted Zeller's formula, returns 0 - Sunday, 1 - Monday ... 6 - Saturday
def get_weekday(y, m, d):  
    return (d+(13*((10+m)%12+1)-1)//5+y%100+y%100//4+(y//100)//4-2*(y//100))%7

start_year = 2017
end_year = 2100

target_date = 22
target_month = 2    # 0 - January, 1 - February ... 11 - December
target_weekday = 2  # 0 - Sunday, 1 - Monday ... 6 - Saturday

years = [year for year in range(start_year, end_year + 1) if
         get_weekday(year, target_month, target_date) == target_weekday]
# gives: [2022, 2033, 2039, 2044, 2050, 2061, 2067, 2072, 2078, 2089, 2095]

答案 3 :(得分:0)

如果您想使用datetime模块:

>>> tuesdays = [year for year in range(2017, 2101) if datetime.date(year, 3, 22).weekday() == 1]

>>> tuesdays
[2022, 2033, 2039, 2044, 2050, 2061, 2067, 2072, 2078, 2089, 2095]