두 날짜의 차이를 초 단위로 확인하려면 어떻게합니까?


180

이를 위해 더 쉬운 방법이 있어야합니다. 매번 새로 고치려는 객체가 있으므로 생성 시점을 기록하고 현재 타임 스탬프를 확인한 후 필요에 따라 새로 고칩니다.

datetime.datetime은 어려운 것으로 판명되었으며 ctime 라이브러리에 들어가고 싶지 않습니다. 이런 종류의 일에 더 쉬운 것이 있습니까?

답변:


515

알려진 두 날짜 간의 차이를 계산하려면 다음 total_seconds과 같이 사용 하십시오.

import datetime as dt

a = dt.datetime(2013,12,30,23,59,59)
b = dt.datetime(2013,12,31,23,59,59)

(b-a).total_seconds()

86400.0

#note that seconds doesn't give you what you want:
(b-a).seconds

0


95
`노트 '는 사람들이 놓치는 가장 중요한 부분입니다. 나는 그것에 또 다른 투표를 포기할 수 있기를 바랍니다.
Dexter

겉보기에 잘못된 결과를 얻는 경우가 있습니다. 스플릿 세컨드 차이의 경우 59.800 초 따라서, 이러한 초, 밀리 초, 또는 마이크로의 차이 같은 작은 작업을 위해, 하나는 사용할 수 (b-a).microseconds(1000) 초 (1000000) 또는 밀리 초를 얻을 수 있음을 나누어 다음과
Zld 프로덕션

a와 b가
바뀌어도

@Nickpick 값이 항상 양수인 것은 아닙니다. 예를 들면 다음과 같습니다 -60:from datetime import datetime; (datetime(2019, 1, 1, 0, 0) - datetime(2019, 1, 1, 0, 1)).total_seconds()
JDiMatteo

인상적인 솔루션! 함수를 작성하기 위해 깨끗한 코드가 필요하지 않습니다.
Paulo zOiO zuLLu Fabrício

35
import time  
current = time.time()

...job...
end = time.time()
diff = end - current

그게 당신을 위해 일할 것입니까?


1
+1; 우리는 실제로 두 호출 날짜에 관심이 없습니다. 우리는 경과 시간에 관심이 있습니다. 따라서 표시된대로 원시 타임 스탬프를 사용하십시오.
Karl Knechtel

14
>>> from datetime import datetime

>>>  a = datetime.now()

# wait a bit 
>>> b = datetime.now()

>>> d = b - a # yields a timedelta object
>>> d.seconds
7

(7은 조금 이상 기다린 시간이 될 것입니다)

datetime.datetime이 상당히 유용하다는 것을 알았습니다. 복잡하거나 어색한 시나리오가 있으면 알려주십시오.

편집 : @WoLpH 덕분에 날짜 시간이 서로 가깝도록 항상 자주 새로 고치려고하는 것은 아닙니다. 델타의 요일을 고려하여 더 긴 시간 소인 불일치를 처리 할 수 ​​있습니다.

>>> a = datetime(2010, 12, 5)
>>> b = datetime(2010, 12, 7)
>>> d = b - a
>>> d.seconds
0
>>> d.days
2
>>> d.seconds + d.days * 86400
172800

1
당신이 d.seconds + d.days * 86400대신 돌아 오면 , 그것은 며칠 동안 맞습니다;)
Wolph

7
일반적인 경우에는 이것이 올바르지 않습니다 . case a - b, where ais before b (즉, 결과가 부정적 임) : (a - b).seconds == 86282while을 고려하십시오 a - b == datetime.timedelta(-1, 86276, 627665). 올바른 방법은 사용하는 것입니다 timedelta.total_seconds()... 그러나 그것은 py2.7 + 만입니다.
David Wolever

4
실제로 대답은 옳지 않으며 @DavidWolever 의견을 반영해야합니다. 정답은 use timedelta.total_seconds()입니다. 이에 따라 공감.
astrojuanlu 2016 년

3
Python 2.6 답변으로 상향 조정되었습니다. total_seconds()2.7+ 기능입니다.
Joe Holloway

@JoeHolloway 파이썬 2.6에서도 제대로 작동하지 않는 것 같습니다.
zen11625

12

파이썬 2.7에서 total_seconds () 함수가 있습니다. 파이썬 2.6의 코드는 아래를 참조하십시오.

import datetime
import time  

def diffdates(d1, d2):
    #Date format: %Y-%m-%d %H:%M:%S
    return (time.mktime(time.strptime(d2,"%Y-%m-%d %H:%M:%S")) -
               time.mktime(time.strptime(d1, "%Y-%m-%d %H:%M:%S")))

d1 = datetime.now()
d2 = datetime.now() + timedelta(days=1)
diff = diffdates(d1, d2)

0

나를 위해 일하고있는 것이 있습니다.

from datetime import datetime

date_format = "%H:%M:%S"

# You could also pass datetime.time object in this part and convert it to string.
time_start = str('09:00:00') 
time_end = str('18:00:00')

# Then get the difference here.    
diff = datetime.strptime(time_end, date_format) - datetime.strptime(time_start, date_format)

# Get the time in hours i.e. 9.60, 8.5
result = diff.seconds / 3600;

도움이 되었기를 바랍니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.