Я написал функцию, которая принимает строковый аргумент в форме 'yyyy-mm-dd' и возвращает кортеж сезона и дня недели. Пожалуйста, измените функцию в соответствии с вашими потребностями.
from datetime import date, datetime
def date_week(date_str):
"""
this method returns season and day of week tuple from str
arg in the format 'yyyy-mm-dd'
"""
datetime_obj = datetime.strptime(date_str, '%Y-%m-%d')
weekdays = {0:'monday',
1:'tuesday',
2:'wednesday',
3:'thursday',
4:'friday',
5:'saturday',
6:'sunday'}
day_of_week = weekdays[datetime_obj.weekday()] # returns day of week
Y = 2000 # dummy leap year to allow input X-02-29 (leap day)
seasons = [('winter', (date(Y, 1, 1), date(Y, 3, 20))),
('spring', (date(Y, 3, 21), date(Y, 6, 20))),
('summer', (date(Y, 6, 21), date(Y, 9, 22))),
('autumn', (date(Y, 9, 23), date(Y, 12, 20))),
('winter', (date(Y, 12, 21), date(Y, 12, 31)))]
if isinstance(datetime_obj, datetime):
datetime_obj = datetime_obj.date()
datetime_obj = datetime_obj.replace(year=Y)
season = next(season for season, (start, end) in seasons
if start <= datetime_obj <= end) # returns season
return day_of_week, season
Если мы позвоним date_week("2019-10-23")
, она вернет ('wednesday', 'autumn')