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