Как из даты вычитать время?

Мне нужно из даты вычесть время.

Код:

import datetime
open = datetime.datetime.strptime('9:00:00', '%H:%M:%S')
now = datetime.datetime.now()
trading_open = now - open
print(trading_open)
#44655 days, 13:15:19.032548

Есть ли возможность получить разницу в часах и минутах?


Ответы (3 шт):

Автор решения: inquirer

Дело в том, что строка

open = datetime.datetime.strptime('9:00:00', '%H:%M:%S')

возвращает '1900-01-01 09:00:00' Установил дату с днем, месяцем и годом, теперь все как нужно.

import datetime

open = datetime.datetime.strptime('05.04.2022 9:00:00', '%d.%m.%Y %H:%M:%S')
now = datetime.datetime.now()
trading_open = now - open
print(trading_open)

Если не знаем даты, то можно попробовать поставить текущую:

import datetime
from datetime import date

open = datetime.datetime.strptime(str(date.today()) + ' 9:00:00', '%Y-%m-%d %H:%M:%S')
now = datetime.datetime.today()
trading_open = now - open
print(trading_open)

Разница создает объект 'datetime.timedelta' а с ним не так просто. Но вам же нужен не стандартный вариант. Поэтому получаем следующее. Вообщем из 'trading_open' делаю строку и если есть разница в один день, то ищу после запятой плюс пробел, извлекаю только строку часов и минут. Меня одно смущает. Вы точно уверены, что текущее время будет браться после 9 часов, если до то будут минусовые значения?

open = datetime.datetime.strptime(str(date.today()) + ' 9:00:00', '%Y-%m-%d %H:%M:%S')
now = datetime.datetime.today()
trading_open = now - open
ttt = str(trading_open)

start = ttt.find(",")
fine = ttt.rfind(":")
if start > 0:
    start+=1
else:
    start = 0

print(ttt[start:fine])
→ Ссылка
Автор решения: Сергей

"Что-то я делаю не так" - вы из сегодняшнего для вычитаете 9 утра 1 января 1900 года. Отладочная печать с выводом отдельно now и open помогла бы понять причину.

import datetime
open = datetime.datetime.strptime('9:00:00', '%H:%M:%S')
now = datetime.datetime.now()
print(now)  #2022-04-06 22:30:59.971048
print(open) #1900-01-01 09:00:00 
trading_open = now - open
print(trading_open)
#44655 days, 13:30:59.971048
→ Ссылка
Автор решения: P1n_C0der

Отвечаю на свой вопрос (которые не совсем корректен)

import pytz
import datetime

tz_moscow = pytz.timezone("Europe/Moscow")

now = datetime.datetime.now(tz_moscow)
current_time = now.strftime("%Y-%m-%d")

now = now.strftime('%Y-%m-%d %H:%M')
now = datetime.datetime.strptime(now, '%Y-%m-%d %H:%M')
now = tz_moscow.localize(now)

open = datetime.datetime.strptime(current_time + ' 9:00', '%Y-%m-%d %H:%M')
open = tz_moscow.localize(open)

open1 = open - now
print(open1)
#выводит разницу московского(сейчас) и 9 часами (также по Москве)
→ Ссылка