Как определить год до указанной даты 2017-08-23 с датой Python? - PullRequest
1 голос
/ 10 ноября 2019

Я пытаюсь определить дату за год до 2017-08-23.

Все примеры, которые я видел, где за год до указанной даты показано использование datetime.datetime.now(). Мне нужно определить год до 2017-08-23.

last_date = 2017-08-23
one_year_prior = last_date - dt.timedelta(days=3*365)

неподдерживаемые типы операндов для -: 'str' и 'datetime.timedelta'

Я надеялся получить год до 2017-08-23. Мне нужна дата в формате гггг-мм-дд для следующей части домашнего задания.

Ответы [ 4 ]

0 голосов
/ 10 ноября 2019

Это годом раньше, и это должно отформатировать и для вас

y = datetime.datetime(2017,8,23) - datetime.timedelta(days=1*365)                                                                                       

In [457]: y                                                                                                                                                   
datetime.datetime(2016, 8, 23, 0, 0)

print(str(y.year) + '-' + str(y.month) + '-' + str(y.day))
2016-8-23

0 голосов
/ 10 ноября 2019

Создайте дату с помощью dateutil.parser

import dateutil.parser
yourdate = dateutil.parser.parse("2017-08-23")

Затем используйте это вместо

Будьте осторожны, если использование високосных годов может привести к неудобствам:

date(2012, 1, 1) + timedelta(days=365) → date(2012, 12, 31)
0 голосов
/ 10 ноября 2019

Ваш объект last_date должен быть datetime объектом. Вы можете превратить его в объект datetime, используя last_date = datetime.date(<year>, <month>, <day>), тогда ваша формула должна работать нормально. Вы можете привести полученный объект как str, чтобы получить ответ с тем же форматированием.

0 голосов
/ 10 ноября 2019

Чтобы применить timedelta(), вам нужно преобразовать вашу строку в дату и время . Один из способов сделать это - использовать strptime():

>>> from datetime import datetime, timedelta

>>> s = "2017-08-23"

>>> dt = datetime.strptime(s, "%Y-%m-%d")

>>> one_year_prior = dt - timedelta(days=365)
>>> one_year_prior
datetime.datetime(2016, 8, 23, 0, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...