Пожалуйста, что не так с моим кодом:
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)
Дисплей "2013-01-01 00:00:00", спасибо.
Пожалуйста, что не так с моим кодом:
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)
Дисплей "2013-01-01 00:00:00", спасибо.
Номер недели не достаточно для создания даты; вам нужен день недели. Добавить по умолчанию:
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d + '-1', "%Y-W%W-%w")
print(r)
-1
и -%w
указывает парсеру выбрать понедельник на этой неделе. Это выводит:
2013-07-01 00:00:00
%W
использует понедельник в качестве первого дня недели. Хотя вы можете выбрать свой собственный будний день, вы можете получить неожиданные результаты, если отклонитесь от этого.
См. strptime()
поведения strftime()
и strptime()
в документации, сноска 4:
При использовании с
strptime()
%U
и%W
используются только в вычислениях, если указаны день недели и год.
Обратите внимание, что если номер вашей недели является датой недели ISO, вы захотите использовать вместо %GW%V-%u
! Эти директивы требуют Python 3.6 или новее.
Для завершения других ответов - если вы используете номера недель ISO, эта строка подходит (чтобы получить понедельник для данного номера недели ISO):
import datetime
d = '2013-W26'
r = datetime.datetime.strptime(d + '-1', '%G-W%V-%u')
print(r)
%G
, %V
, %u
являются ISO-эквивалентами %Y
, %W
, %w
, так что получается:
2013-06-24 00:00:00
Доступен в Python 3. 6+; из документов.
import datetime
res = datetime.datetime.strptime("2018 W30 w1", "%Y %W w%w")
print res
Добавление 1 в качестве дня недели даст точное начало текущей недели. Добавление timedelta (days = 6) даст вам конец недели.
datetime.datetime(2018, 7, 23)
Если у вас есть годовой номер недели, просто добавьте количество недель в первый день года.
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> week = 40
>>> year = 2019
>>> date = datetime.date(year,1,1)+relativedelta(weeks=+week)
>>> date
datetime.date(2019, 10, 8)
Здесь удобная функция, включая проблему с нулевой неделей.