2010-12-06 3 views
102

더 쉬운 방법이 있어야합니다. 나는 너무 자주 새로 고쳐지기를 원하는 객체를 가지고 있으므로, 생성 된 시점을 기록하고, 현재의 타임 스탬프를 확인하고, 필요에 따라 새로 고침하고 싶다.두 날짜 간의 차이를 초 단위로 확인하려면 어떻게합니까?

datetime.datetime은 어렵다는 것을 입증했으며, 나는 ctime 라이브러리에 뛰어 들고 싶지 않습니다. 이런 종류의 일에 더 쉬운 것이 있습니까?

답변

298

이 같은 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 
+41

'메모'는 사람들이 놓칠 수있는 가장 중요한 부분입니다. 나는 그것에 또 하나의 표를 던지기를 바란다. – Dexter

+0

내가 겉으로보기에는 ... 잘못된 결과를주는 것을 눈치 채는 때가 있습니다. 초당 2 분의 1 차이는 59.800 초입니다. 따라서 초 단위, 밀리 초 단위 또는 마이크로 초 단위와 같은 더 작은 연산의 경우 '(ba) .microseconds'를 사용하여 초 (1000000) 또는 밀리 초 (1000)가되도록 나눌 수 있습니다. –

+0

값이 나타납니다 a와 b가 바뀌어도 항상 양수입니다. – Nickpick

24
import time 
current = time.time() 

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

그런가요?

+1

일에 대한 코드는 아래를 참조하시기 바랍니다; 우리는 두 번의 호출 날짜에 대해서는별로 신경 쓰지 않습니다. 우리는 경과 시간을 중요하게 생각합니다. 그림과 같이 원시 타임 스탬프 만 사용하십시오. –

12
>>> from datetime import datetime 

>>> a = datetime.now() 

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

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

, 당신이 만난 복잡한 또는 어색한 시나리오가 있다면, 그래서 datetime.datetime가 상당히 유용하게 찾을 수

하십시오 (7 위 조금 기다렸다 시간의 어떤 양이 될 것입니다) 저희에게 알려주십시오.

편집 : @WoLpH에 감사드립니다. 항상 빈번히 새로 고침을해야하는 것은 아닙니다. datetimes가 가까이에있을 것입니다. 당신이 알려진 두 날짜 사이의 차이를 계산하려면,

>>> 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

+5

일반적으로 이것은 * not correct *입니다. 'a-b * == 86282 '인 a - b == 인 경우 (즉, 결과가 음수가되도록)'a - b '를 생각해보십시오. datetime.timedelta (-1, 86276, 627665)'입니다. 올바른 방법은'timedelta.total_seconds()'를 사용하는 것입니다.하지만 py2.7 + 만 있습니다. –

+2

사실, 그 대답은 옳지 않아 @DavidWolever 주석을 반영해야합니다. 정답은'timedelta.total_seconds()'를 사용하는 것입니다. 그에 따라 Downvoted. – astrojuanlu

8

우리는 total_sec onds() 파이썬 2.7 와 파이썬 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) 
-2
>>> import datetime 

>>> d1 = datetime.datetime.now() 

>>> d2 = datetime.datetime.now() 

>>> d=d2 - d1 

>>> d.seconds 
관련 문제