У меня два datetime.time
значения, exit
и enter
я хочу сделать что-то вроде:
duration = exit - enter
Однако я получаю эту ошибку:
TypeError: неподдерживаемые типы операндов для -: 'datetime.time' и 'datetime.time
Как мне это сделать правильно? Одно из возможных решений - преобразовать time
переменные в datetime
переменные, а затем вычесть их, но я уверен, что у вас, ребята, должен быть лучший и более чистый способ.
datetime(1,1,1,0,0,0)
вместоdate.today()
.datetime
exit
, посколькуexit
это встроенная функция.combine
метода в моемdatetime
модуле:AttributeError: 'module' object has no attribute 'combine'
datetime
модуль иdatetime
внутри него есть объект. У объекта внутри естьcombine
метод. Если вы просто импортируетеdatetime
(например:)import datetime
, то вам нужно сделать это позжеdatetime.datetime.combine
.date.today()
предыдущее иdate.today()
позднее вернут разные значения. Лучше присвоить значениеdate.today()
переменной.Использование:
Использование
date.min
немного более лаконично и работает даже в полночь.Это может быть не так,
date.today()
это может привести к неожиданным результатам, если первый вызов произойдет в 23:59:59, а следующий - в 00:00:00.источник
вместо использования времени попробуйте timedelta:
источник
datetime.time
не поддерживает это, потому что вычитать время таким образом почти бессмысленно. Используйте полный,datetime.datetime
если хотите.источник
datetime.time
объектаa
иb
относятся к одному и тому же дню, и чтоb > a
, тогда операцияb - a
имеет идеальный смысл.arctan(0) = (0, pi, 2pi, ...)
, но нас просто не волнует ни одно из этих значений после первого. Таким образом,4:00 - 20:00
это8:00
- это также (32:00
,56:00
, ...), но кого это волнует?У вас есть два объекта datetime.time, поэтому вы просто создаете два timedelta, используя datetime.timedetla, а затем вычитаете, как сейчас, используя операнд "-". Ниже приведен пример способа двухкратного вычитания без использования datetime.
разница_delta - это ваша разница, которую вы можете использовать по своим причинам.
источник
datetime.min + delta
Библиотека python timedelta должна делать то, что вам нужно. A
timedelta
возвращается, когда вы вычитаете дваdatetime
экземпляра.источник
источник
datetime.time
не может этого сделать - но вы могли бы использоватьdatetime.datetime.now()
источник
У меня была аналогичная ситуация, когда мы с вами использовали внешнюю библиотеку под названием arrow .
Вот как это выглядит:
источник