我正在减去两个日期并计算小时差异
c_date = "2011-03-23 12:52:14"
c_obj_date = datetime.datetime.strptime(c_date, "%Y-%m-%d %H:%M:%S")
n_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print "Creation Date:", c_date
print "Current Date: ", n_date
hours = abs(n_date - c_obj_date).total_seconds() / 3600.0
print hours
然而这给了我这个错误:
File "./eight.py", line 69, in zabbix_result
hours = abs(n_date - c_obj_date).total_seconds() / 3600.0
TypeError: unsupported operand type(s) for -: 'str' and 'datetime.datetime'
我正在使用python2.4
更新:
我现在用
n_date = datetime.datetime.now()
但是total_seconds()在python2.4中不起作用?任何想法我如何减去两个日期时间对象并获得小时差异?
答案 0 :(得分:2)
查看错误消息。操作数左侧的类型是str
。问题出在第三行。请尝试删除strftime
部分。
答案 1 :(得分:1)
n_date
的类型是一个字符串。 c_obj_date
的类型是日期时间,这意味着您不能从另一个中减去一个。这也是错误信息所说的内容。
您可能打算执行以下操作:datetime.datetime.now() - c_obj_date
。您现在拥有timedelta
,您可以使用以下方法获取秒数。
在Python 2.7中引入了total_seconds()
方法,并且您使用的是Python 2.4,因此无效。如果您希望在Python 2.4中执行此操作,只需按照文档中的计算方法进行操作:
(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
其中td
等于datetime.datetime.now() - c_obj_date
。
答案 2 :(得分:1)
您需要使用datetime对象。
更改此行:
n_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
使用:
n_obj_date = datetime.datetime.now()
并将以下内容调整为:
print "Creation Date:", c_date
print "Current Date: ", n_obj_date.strftime("%Y-%m-%d %H:%M:%S")
hours = abs(n_obj_date - c_obj_date).total_seconds() / 3600.0
print hours
这样你就可以在两个日期时间对象之间进行减法。
答案 3 :(得分:1)
strftime将timey-object转换为字符串,strptime将字符串解析为一个时间对象。
因此n_date是一个字符串。
答案 4 :(得分:1)
n_date是一个字符串,c_obj_date是一个datetime.datetime对象。我不确定你从哪里获得.total_seconds()方法(它不是timedelta成员......)。尝试这样的事情:
c_date = "2011-03-23 12:52:14" c_obj_date = datetime.datetime.strptime(c_date, "%Y-%m-%d %H:%M:%S") n_date = datetime.datetime.now() print "Creation Date:", c_date print "Current Date: ", n_date absdiff = abs(n_date - c_obj_date) hours = (absdiff.days * 24 * 60 * 60 + absdiff.seconds) / 3600.0 print hours