Дата Python, вычисляемая с указанием года и недели, неверна - PullRequest
0 голосов
/ 16 октября 2018

У нас возникла проблема при расчете начала первой недели 2019 года.

Параметры: year и week_of_year.Мы всегда смотрим на неделю в понедельник.

Код для получения первого дня определенного года:

from datetime import datetime

result = datetime.strptime('%04d-%02d-1' % (year, week_of_year), '%Y-%W-%w').date()

Это работает в течение большей части лет, но не в случае, когдаyear = 2019 и week_of_year = 1, Python вычисляет это для даты 2019-01-02, а не для ожидаемого 2018-12-31.

Наше текущее решение для решения этой проблемы:

from datetime import datetime, timedelta

result = datetime.strptime('%04d-%02d-1' % (year, week_of_year), '%Y-%W-%w').date()

# Fixes issue with Python date computing returning the incorrect date
# This only occures for some years. E.g. 2019.
offset = result.isocalendar()[1] - datetime.strptime('%04d-01-01' % year, '%Y-%m-%d').date().isocalendar()[1]
if offset > 0:
    result = result - timedelta(days=7)

Любоедругие идеи о том, как решить эту проблему?

1 Ответ

0 голосов
/ 17 октября 2018

После консультации https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior, я могу сказать, что %W не соответствует ISO-определению счетчика недель, а просто считает с первого понедельника года.Предыдущие дни включаются в число недель 0 ...

Вы можете попробовать %V вместе с %G:

result = datetime.strptime('%04d-%02d-1' % (year, 1), '%G-%V-%w').date()
...