2016-06-20 5 views
1

내가 뭔가를 계산에 "올해 월, 일의"을하지 않는 것이 기부 날짜 시간계산 날짜 시간 차이 파이썬

def timediff(time1, time2): 
    timeformat = '%d%b%Y:%H:%M:%S' 
    #time1="01MAR2016:07:11:53" 
    #time2="01MAR2016:16:28:38" 

    try: 
     date_object1 = datetime.strptime(time1, timeformat) 
     date_object2 = datetime.strptime(time2, timeformat) 
    except ValueError: 
     print "time1 format: " + repr(time1) 
     print "time2 format: " + repr(time2) 
     raise      

    return abs((date_object2 - date_object1).seconds) 

사이의 시간 (초) 차이를 계산하는 timediff 기능을 쓰고 있어요. 이 같은에있는 경우 그것은 잘못된 답을 제공

다른과 그러나
>>> t1="01MAR2016:07:11:53" 
>>> t2="01MAR2016:16:28:38" 
>>> timediff(t1, t2) 
33405 

"월, 일, 년" "월, 일 년,"올바른 계산을 제공합니다. 이것은 단지 (제공 ~ 65K 초) 시간 차이 ~ 18 시간

>>> t1="02APR2016:06:43:51" 
>>> t2="06APR2016:00:58:03" 
>>> timediff(t1, t2) 
65652 

또는 24 다른이 0

>>> t1="01MAR2016:07:11:53" 
>>> t2="02MAR2016:07:11:53" 
>>> timediff(t1, t2) 
0 

날짜 시간 내가

>>> t1="01MAR2016:07:11:53" 
>>> t2="02MAR2016:07:11:53" 
>>> datetime.strptime(t1, timeformat) 
datetime.datetime(2016, 3, 1, 7, 11, 53) 
>>> datetime.strptime(t2, timeformat) 
datetime.datetime(2016, 3, 2, 7, 11, 53) 

암을 제공하는 시간 형식을 취 제공을 계산 나는 아무것도 없어?

날짜를 초로 변환하는 또 다른 방법이 있습니다. 그러나 아직도이 방법이 효과가없는 이유를 알고 싶습니다.

내 다른

def timediff(time1, time2): 
    timeformat = '%d%b%Y:%H:%M:%S' 
    t1 = datetime.strptime(time1, timeformat) 
    t2 = datetime.strptime(time2, timeformat) 

    return abs(time.mktime(t1.timetuple()) - time.mktime(t2.timetuple())) 

예 :

>>> t2 
'02MAR2016:07:11:53' 
>>> t1 
'01MAR2016:07:11:53' 
>>> timediff(t1,t2) 
86400.0 
+3

당신은'사용 ()' –

+0

당신 말이 맞아요! 명확히 해 주셔서 감사합니다. .total_seconds()이 (가) 있다는 것을 알지 못했습니다. – Nogcas

답변

5
당신은 total_seconds()를 사용할 필요가

하지 seconds : 대신`.total_seconds의 .seconds`

>>> import datetime 
>>> f = '%d%b%Y:%H:%M:%S' 
>>> t1 = '01MAR2016:07:11:53' 
>>> t2 = '02MAR2016:07:11:53' 
>>> d1 = datetime.datetime.strptime(t1, f) 
>>> d2 = datetime.datetime.strptime(t2, f) 
>>> print(d2-d1) 
1 day, 0:00:00 
>>> print((d2-d1).total_seconds()) 
86400.0 
>>> print((d2-d1).seconds) 
0 
+0

답변을 작성하는 데 나를 때려 눕히고, 여기에 문서를 추가하려면 ['timedelta.seconds'] (https://docs.python.org/2/library/datetime.html# datetime.timedelta.resolution) "0에서 86399 사이의 값을 포함합니다"및 ['timedelta.total_seconds()'] (https://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds)에 대한 링크 –