计算时差时出错

时间:2016-07-01 05:10:10

标签: python

我在计算时间差异时遇到以下错误?如何解决?

from datetime import datetime, date
import time
print "Start : %s" % time.ctime()
start_time = time.ctime()
#do something
print "How to calculate time diff?"
end_time = time.ctime()
total_elapsed_time = datetime.combine(date.today(), end_time) - datetime.combine(date.today(), start_time)
print "TOTAL ELAPSED TIME" +  str(total_elapsed_time)

错误: -

Traceback (most recent call last):
  File "time_diff.py", line 8, in <module>
    total_elapsed_time = datetime.combine(date.today(), end_time) - datetime.combine(date.today(), start_time)
TypeError: combine() argument 2 must be datetime.time, not str

5 个答案:

答案 0 :(得分:2)

错误清楚地表明combine()的参数2必须是datetime.time。

你应该有一个datetime.time的实例,如:

d = datetime.now()
timepart = d.time()
datepart = d.date()
datetime.combine(datepart, timepart)

答案 1 :(得分:1)

from datetime import datetime, timedelta

def calc():
    s = datetime.now()
    e = datetime(day=21, month=7, year=2016, hour=12, minute=0)

    diff = e - s

diff 现在是datetime.timedelta实例。在此实例中,您具有日期,秒,微秒和按名称total_seconds的函数等属性。

PS:这仅供参考。我希望它有助于实现解决方案

答案 2 :(得分:1)

首先,你是mixin 3数据类型,所以你的方法基本上是错误的。

有两种(基本)方法,如何在python中获取和存储时间(两个来自std lib):

  1. 时间戳 - 您导入time模块,然后time.time()将返回float - 从纪元开始的秒数,然后任何比较就像比较浮点数,如果数字更大 - 那么它代表的时间是将来,日期之间的任何差异也是一个数字 - 表示日期之间的秒数 - 所以将分钟数,小时数等除以60,3600等也很简单。 / LI>
  2. datetime对象导入datetime.datetime以获取可以操作的对象,操作比时间戳更简单,因为它会自动转换为人类可读格式,所有比较运算符都可以并且日期之间的任何差异(date2-date1)都会返回为datetime.timedelta,您可以在其中提取它所代表的天数,秒数和毫秒数。
  3. 所以在你的代码中你可以使用:

    时间戳:

    import time
    
    date1 = time.time()
    print 'Start time: %s' % time.ctime(date1)
    ...
    date2 = time.time()
    print 'End time: %s' % time.ctime(date2)
    
    print 'Time it took: %0.2f seconds' % (date2 - date1)
    

    日期时间

    from datetime import datetime
    
    date1 = datetime.now()
    print 'Start time: %s' % date1
    ...
    date2 = datetime.now()
    print 'End time: %s' % date2
    
    print 'Time it took: %s' % (date2 - date1)
    

答案 3 :(得分:0)

time.ctime()返回一个字符串,即错误的来源。

See Python time.ctime

time.time()可能就是你要找的东西:

See Python ticks

答案 4 :(得分:0)

你的start_time和end_time是字符串。您的datetime.combine也应该将第二个参数作为datetime.time对象。您的time.ctime也会返回日期和年份信息。因此,首先只提取时间信息,然后将其转换为datetime.time对象。

您可以使用ctime存储开始和结束时间,然后执行以下操作:

import datetime
import time
#store at start time
a=datetime.datetime.strptime(time.ctime(), "%a %b %d %H:%M:%S %Y")
#store at end time
b=datetime.datetime.strptime(time.ctime(), "%a %b %d %H:%M:%S %Y")
print b-a

正如@Jerzyk指出的那样,除非你想以特定的格式显示它,否则不需要解析它。所以,你也可以这样做:

a=datetime.datetime.now()
b=datetime.datetime.now()
print b-a

这将返回一个datetime.timedelta,你可以解析它以便以你想要的方式显示结果。