2016-06-20 178 views
1

我写timeDiff测量功能计算2捐赠日期时间计算日期时间差蟒蛇

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) 

之间的时间(秒)的区别似乎不采取“月,日,年”来计算。它提供了正确的计算,如果它是在相同的“月,日,年”

>>> t1="01MAR2016:07:11:53" 
>>> t2="01MAR2016:16:28:38" 
>>> timediff(t1, t2) 
33405 
不同

然而“月,日,年”,它给了错误的答案。这仅计算时间差〜18小时(可提供〜65000秒)

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

你正在使用'.seconds',而不是'.total_seconds( )' –

+0

你是对的!谢谢你的澄清。不知道有.total_seconds() – Nogcas

回答

5

您需要使用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) –