python比较两个日期

时间:2012-04-07 17:46:49

标签: python linux

我正在减去两个日期并计算小时差异

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中不起作用?任何想法我如何减去两个日期时间对象并获得小时差异?

5 个答案:

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