두 가지 datetime.time
값이 exit
있으며 enter
다음과 같이하고 싶습니다.
duration = exit - enter
그러나 다음 오류가 발생합니다.
TypeError :-에 대해 지원되지 않는 피연산자 유형 : ‘datetime.time’및 ‘datetime.time
이 작업을 올바르게 수행하는 방법은 무엇입니까? 한 가지 가능한 해결책은 time
변수를 datetime
변수 로 변환 한 다음 하위 구조 로 변환하는 것입니다.하지만 여러분이 더 좋고 깨끗한 방법을 가지고 있어야한다고 확신합니다.
답변
이 시도:
from datetime import datetime, date
datetime.combine(date.today(), exit) - datetime.combine(date.today(), enter)
combine
뺄 수있는 datetime을 빌드합니다.
답변
사용하다:
from datetime import datetime, date
duration = datetime.combine(date.min, end) - datetime.combine(date.min, beginning)
사용 date.min
은 좀 더 간결하고 자정에도 작동합니다.
date.today()
첫 번째 호출이 23:59:59에 발생하고 다음 호출이 00:00:00에 발생하면 예기치 않은 결과가 반환 될 수있는 경우가 아닐 수 있습니다 .
답변
시간을 사용하는 대신 timedelta를 시도하십시오.
from datetime import timedelta
t1 = timedelta(hours=7, minutes=36)
t2 = timedelta(hours=11, minutes=32)
t3 = timedelta(hours=13, minutes=7)
t4 = timedelta(hours=21, minutes=0)
arrival = t2 - t1
lunch = (t3 - t2 - timedelta(hours=1))
departure = t4 - t3
print(arrival, lunch, departure)
답변
datetime.time
이러한 방식으로 시간을 빼는 것은 거의 의미가 없기 때문에이를 지원하지 않습니다. 이렇게하려면 전체를 사용하십시오 datetime.datetime
.
답변
두 개의 datetime.time 개체가 있으므로 datetime.timedetla를 사용하여 두 개의 timedelta를 만든 다음 “-“피연산자를 사용하여 지금처럼 뺍니다. 다음은 datetime을 사용하지 않고 두 번 빼는 방법의 예입니다.
enter = datetime.time(hour=1) # Example enter time
exit = datetime.time(hour=2) # Example start time
enter_delta = datetime.timedelta(hours=enter.hour, minutes=enter.minute, seconds=enter.second)
exit_delta = datetime.timedelta(hours=exit.hour, minutes=exit.minute, seconds=exit.second)
difference_delta = exit_delta - enter_delta
difference_delta 는 귀하의 이유로 사용할 수있는 차이 입니다.
답변
파이썬 timedelta 라이브러리는 필요한 작업을 수행해야합니다. timedelta
두 datetime
인스턴스 를 빼면 A 가 반환됩니다 .
import datetime
dt_started = datetime.datetime.utcnow()
# do some stuff
dt_ended = datetime.datetime.utcnow()
print((dt_ended - dt_started).total_seconds())
답변
import datetime
def diff_times_in_seconds(t1, t2):
# caveat emptor - assumes t1 & t2 are python times, on the same day and t2 is after t1
h1, m1, s1 = t1.hour, t1.minute, t1.second
h2, m2, s2 = t2.hour, t2.minute, t2.second
t1_secs = s1 + 60 * (m1 + 60*h1)
t2_secs = s2 + 60 * (m2 + 60*h2)
return( t2_secs - t1_secs)
# using it
diff_times_in_seconds( datetime.datetime.strptime( "13:23:34", '%H:%M:%S').time(),datetime.datetime.strptime( "14:02:39", '%H:%M:%S').time())