Почему переход дата-время isocalendar обратно сместится на 1 неделю? - PullRequest
0 голосов
/ 11 июня 2019

Я запускаю datetime.now () (сегодня 6/11) и перехожу на день недели:

>>> now=datetime.now().isocalendar()
>>> now
(2019, 24, 2)

но когда я перехожу обратно, я обнаружил, что это сдвиг на 1 неделю:

>>> res = datetime.strptime(now[0]+'_'+now[1]+'_'+now[2], "%Y_%W_%w")
>>> res 
datetime.datetime(2019, 6, 18, 0, 0)

может кто-нибудь включить это? очень спасибо!

1 Ответ

2 голосов
/ 11 июня 2019
from datetime import daytime

iso_string = str(now[0]).zfill(4) + '_' + str(now[1]).zfill(2) + '_' + str(now[2])
res = datetime.strptime(iso_string, "%G_%V_%u").date()

strptime имеет специальные директивы для номеров недели ISO: "%G_%V_%u"

Из-за проб, кажется, что ведущие нули не имеют большого значения, но официальный стандарт гласитони делают, поэтому обязательно добавьте их с zfill().

Это работает только для python> = 3.6, предыдущие версии strptime кажутся несовместимыми с неделями ISO.

Дляболее ранние версии python, я думаю, что лучше всего использовать модуль isoweek :

from isoweek import Week

res = Week(now[0], now[1]).day(now[2]-1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...