Каков правильный способ выполнения вычитания с помощью datetime

#python #datetime #timedelta

#python #datetime #timedelta

Вопрос:

У меня есть переменная datetime, и я хочу вычесть из нее всего 1 час. Я попытался сделать это с помощью приведенного ниже кода, но я получил следующую ошибку: TypeError: unsupported operand type(s) for -: 'str' and 'datetime.timedelta'

 from datetime import datetime, timedelta

cur_time = datetime.now()
cur_time_f = cur_time.strftime("%Y-%m-%dT%H:%M:%SZ")  
print(cur_time_f)

>> 2020-09-15T09:07:44Z

nueve = cur_time_f - timedelta(hours=1)

print(nueve)
  

Мой ожидаемый результат:

 >> 2020-09-15T08:07:44Z
  

Комментарии:

1. Вы пробовали использовать cur_time вместо cur_time_f ?

2. @mkrieger1 Да, это работает. Но мне нужен формат, который я использую в cur_time_f

3. Вы пробовали использовать strftime with nueve ?

4. @mrkieger1 Что ты имеешь в виду?

5. Строка — это строка, вы не можете выполнять с ней вычисления времени. datetime Объект — это то, с чем вы можете выполнять вычисления времени. Вы можете отформатировать datetime объект в строку с помощью strftime . Выполняйте свои вычисления для datetime объектов и форматируйте их, используя strftime тогда и только тогда, когда вы хотите это вывести.

Ответ №1:

Выполните вычисление, ПРЕЖДЕ чем превратить его в строку

 from datetime import datetime, timedelta

cur_time = datetime.now()
print(cur_time)

>>2020-09-15 11:29:51.756391

cur_time = cur_time - timedelta(hours=1)
cur_time_f = cur_time.strftime("%Y-%m-%dT%H:%M:%SZ")  
print(cur_time_f)

>>2020-09-15T10:29:51Z