Mam dwie datetime.time
wartości, exit
a enter
i chcę zrobić coś takiego:
duration = exit - enter
Jednak pojawia się ten błąd:
TypeError: nieobsługiwane typy operandów dla -: 'datetime.time' i 'datetime.time
Jak mam to zrobić poprawnie? Jednym z możliwych rozwiązań jest konwersja time
zmiennych na datetime
zmienne, a następnie subtruct, ale jestem pewien, że musicie mieć lepszy i czystszy sposób.
datetime(1,1,1,0,0,0)
zamiastdate.today()
.datetime
exit
, ponieważexit
jest to funkcja wbudowana.combine
metody w moimdatetime
module:AttributeError: 'module' object has no attribute 'combine'
datetime
moduł i madatetime
wewnątrz obiekt. Obiekt wewnątrz macombine
metodę. Jeśli po prostu importujeszdatetime
(w ten sposóbimport datetime
:), to co musisz zrobić później, to todatetime.datetime.combine
.date.today()
poprzednie idate.today()
późniejsze zwrócą inną wartość. Lepiej byłoby nadać wartośćdate.today()
zmiennej.Posługiwać się:
Używanie
date.min
jest nieco bardziej zwięzłe i działa nawet o północy.Może się tak nie zdarzyć,
date.today()
ponieważ może to zwrócić nieoczekiwane wyniki, jeśli pierwsze połączenie nastąpi o 23:59:59, a następne o 00:00:00.źródło
zamiast używać czasu, spróbuj timedelta:
źródło
datetime.time
nie obsługuje tego, ponieważ odejmowanie czasów w ten sposób jest prawie bez znaczenia. Użyj pełnego,datetime.datetime
jeśli chcesz to zrobić.źródło
datetime.time
obiektya
ib
są z tego samego dnia, a któreb > a
, wówczas operacjab - a
ma doskonały sens.arctan(0) = (0, pi, 2pi, ...)
, ale nie przejmujemy się żadną z tych wartości po pierwszej. Tak,4:00 - 20:00
jest8:00
- to również (32:00
,56:00
...), ale kogo to obchodzi?Masz dwa obiekty datetime.time, więc wystarczy utworzyć dwie timedelta za pomocą datetime.timedetla, a następnie odjąć, tak jak teraz, używając operandu „-”. Oto przykładowy sposób odejmowania dwukrotności bez użycia daty i godziny.
różnica_delta to różnica, której możesz użyć ze swoich powodów.
źródło
datetime.min + delta
Biblioteka timedelta Pythona powinna zrobić to, czego potrzebujesz. A
timedelta
jest zwracane po odjęciu dwóchdatetime
wystąpień.źródło
źródło
datetime.time
nie mogę tego zrobić - ale możesz użyćdatetime.datetime.now()
źródło
Miałem podobną sytuację jak ty i ja skończyliśmy na korzystaniu z zewnętrznej biblioteki o nazwie arrow .
Oto jak to wygląda:
źródło