파이썬에서 두 번 빼기
두 가지 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
.
Python 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())
나는 당신과 비슷한 상황을 겪었고 화살표 라는 외부 라이브러리를 사용하게되었습니다 .
다음은 다음과 같습니다.
>>> import arrow
>>> enter = arrow.get('12:30:45', 'HH:mm:ss')
>>> exit = arrow.now()
>>> duration = exit - enter
>>> duration
datetime.timedelta(736225, 14377, 757451)
두 개의 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 는 귀하의 이유로 사용할 수있는 차이 입니다.
datetime.time
그것을 할 수 없습니다-그러나 당신은 사용할 수 있습니다 datetime.datetime.now()
start = datetime.datetime.now()
sleep(10)
end = datetime.datetime.now()
duration = end - start
참고URL : https://stackoverflow.com/questions/5259882/subtract-two-times-in-python
'developer tip' 카테고리의 다른 글
SQL 대신 XML을 언제 사용합니까? (0) | 2020.08.22 |
---|---|
C ++ 가상 함수를 안전하게 재정의 (0) | 2020.08.22 |
HTML5에서 "섹션"태그를 올바르게 사용하는 방법은 무엇입니까? (0) | 2020.08.22 |
폴더 또는 파일 크기 가져 오기 (0) | 2020.08.21 |
'dispatch'는 Redux에서 mapToDispatchToProps ()에 대한 인수 일 때 함수가 아닙니다. (0) | 2020.08.21 |