파이썬에서 두 번 빼기
난 두 개가 있다.datetime.time
가치,exit
그리고.enter
그리고 저는 다음과 같은 것을 하고 싶습니다.
duration = exit - enter
그러나 다음 오류가 발생합니다.
유형 오류: -: 'datetime에 대해 지원되지 않는 피연산자 유형입니다.시간' 및 '날짜 시간'을 입력합니다.시간을
어떻게 하면 정확하게 할 수 있습니까?한 가지 가능한 해결책은 다음과 같습니다.time
에 대한 변수.datetime
변수를 뺀 다음에 뺄셈을 합니다. 하지만 여러분들은 분명 더 좋고 깨끗한 방법이 있을 것입니다.
사용해 보십시오.
from datetime import datetime, date
datetime.combine(date.today(), exit) - datetime.combine(date.today(), enter)
combine
감산할 수 있는 날짜/시간을 만듭니다.
사용:
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에 발생하면 예기치 않은 결과가 반환될 수 있습니다.
시간을 사용하는 대신 try time delta:
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)
두 번의 데이트 시간이 있습니다.time 객체를 사용하여 datetime.sysetla를 사용하여 두 개의 time delta를 생성한 다음 "-" 피연산자를 사용하여 지금처럼 감산합니다.다음은 날짜 시간을 사용하지 않고 두 번 감산하는 예입니다.
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_message는 당신의 이유로 사용할 수 있는 당신의 차이입니다.
python time delta 라이브러리는 당신이 필요로 하는 것을 해야 합니다.atimedelta
2를 빼면 반환됩니다.datetime
예를 들면
import datetime
dt_started = datetime.datetime.utcnow()
# do some stuff
dt_ended = datetime.datetime.utcnow()
print((dt_ended - dt_started).total_seconds())
datetime.time
할 수 없습니다 - 하지만 당신은 사용할 수 있습니다.datetime.datetime.now()
start = datetime.datetime.now()
sleep(10)
end = datetime.datetime.now()
duration = end - start
datetime.time
이 방법으로 시간을 빼는 것은 거의 의미가 없기 때문에 에서는 이를 지원하지 않습니다.전체 사용datetime.datetime
당신이 이걸 하고 싶다면요.
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())
timedelta
음(-)의 시간 값을 사용할 수 있습니다.그래서 아래와 같이 간단할 수 있습니다.
답변(한줄)
datetime.timedelta(hours=exit.hour-enter.hour, minutes=exit.minute-enter.minute)
테스트 실행
import datetime
enter = datetime.time(hour=1, minute=30)
exit = datetime.time(hour=2, minute=0)
duration = datetime.timedelta(hours=exit.hour-enter.hour, minutes=exit.minute-enter.minute)
>>> duration
datetime.timedelta(seconds=1800)
저와 당신은 arrow라는 외부 라이브러리를 사용하게 된 것과 비슷한 상황이었습니다.
다음은 다음과 같습니다.
>>> import arrow
>>> enter = arrow.get('12:30:45', 'HH:mm:ss')
>>> exit = arrow.now()
>>> duration = exit - enter
>>> duration
datetime.timedelta(736225, 14377, 757451)
import time
from datetime import datetime
def calcTime(enter,exit):
format="%H:%M:%S"
#Parsing the time to str and taking only the hour,minute,second
#(without miliseconds)
enterStr = str(enter).split(".")[0]
exitStr = str(exit).split(".")[0]
#Creating enter and exit time objects from str in the format (H:M:S)
enterTime = datetime.strptime(enterStr, format)
exitTime = datetime.strptime(exitStr, format)
return exitTime - enterTime
enter = datetime.today().time()
#Sleeping for 5 seconds before initializing the exit variable
time.sleep(5)
exit = datetime.today().time()
duration = calcTime(enter,exit)
print(f"Duration is {duration} (Hours:Minutes:Seconds)")
#Output: Duration is 0:00:05 (Hours:Minutes:Seconds)
도움이 될 경우 표시된 것처럼 calcTime 기능을 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/5259882/subtract-two-times-in-python
'programing' 카테고리의 다른 글
기존 JSON 문서에 배열 값을 삽입하는 방법은 무엇입니까? (0) | 2023.06.17 |
---|---|
for-loop에서 오류 건너뛰기 (0) | 2023.06.17 |
32비트 또는 64비트에 따라 데이터 유형 또는 구조의 크기는 누가 결정합니까? (0) | 2023.06.17 |
(오라클)페이지화 쿼리를 사용할 때 총 결과 수를 가져오는 방법은 무엇입니까? (0) | 2023.06.17 |
터미널 창의 크기 가져오기(행/열) (0) | 2023.06.17 |