Как из даты вычитать время?
Мне нужно из даты вычесть время.
Код:
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 шт):
Дело в том, что строка
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
Отвечаю на свой вопрос (которые не совсем корректен)
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 часами (также по Москве)