我需要了解2017年至2100年(包括两者)的哪些年份将在3月22日为星期二。
我尝试使用datetime
模块,但我无法弄清楚如何......
答案 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]