[python] 파이썬에서 두 번 빼기

두 가지 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 라이브러리는 필요한 작업을 수행해야합니다. timedeltadatetime인스턴스 를 빼면 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())