Есть ли лучший метод для получения этого дня в прошлом году в python? - PullRequest
0 голосов
/ 19 февраля 2020

Например, сегодня среда. Если я хотел получить эту конкретную c среду в прошлом году, то пока я использую метод, который состоит в создании кортежа ISOCalendar из сегодняшней даты и вычитании одного года. Это лучший способ сделать это, или я упускаю что-то простое в классе datetime, чтобы лучше получать сопоставимые даты. Я не хочу получать указанную c дату, но указывается c день недели в этой указанной c неделе.

Я также не знаю, как правильно учитывать високосные дни.

1 Ответ

0 голосов
/ 20 февраля 2020

Предполагая, что вы хотите получить тот же день недели с тем же номером календарной недели, только в другом году. С Python 3.8 вы можете сделать это, используя isocalendar Методы . Примечание : неделя начинается в понедельник, если вы используете календарь ISO.

import datetime

_, weeknumber, weekday = datetime.date(2020, 2, 19).isocalendar()
# (2020, 8, 3); year, calendar week, day of week

other_year = 2019

# using date.fromisocalendar() (Python 3.8):
dt_otheryear = datetime.date.fromisocalendar(other_year, weeknumber, weekday)
# datetime.date(2019, 2, 20)

# ...or using strptime
dt_otheryear = datetime.datetime.strptime(f"{other_year} {weeknumber} {weekday}", '%G %V %u')
# datetime.datetime(2019, 2, 20, 0, 0)

# check:
# datetime.date(2019, 2, 20).isocalendar()
# (2019, 8, 3)
...