2012-04-07 180 views
0

我正在减去两个日期和计算以小时为单位的差异蟒蛇比较两个日期

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

UPDATE :

我现在使用

n_date = datetime.datetime.now() 

但total_seconds()不会在python2.4中工作?任何想法如何我可以减去两个日期时间对象,并获得小时差异?

+0

看到我的回答以下... – thebjorn 2012-04-07 18:05:19

回答

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

total_seconds是在Python 2中引入的。7:http://docs.python.org/library/datetime.html#datetime.timedelta.total_seconds – 2012-04-07 18:02:11

+0

很酷这个工作! – krisdigitx 2012-04-07 18:26:17

2

看看错误消息。操作数左侧的类型是str。问题在第三行。尝试删除strftime部分。

1

n_date的类型是一个字符串。 c_obj_date的类型是一个日期时间,这意味着你不能从另一个中减去一个。这也是错误信息所说的。

您可能需要执行以下操作:datetime.datetime.now() - c_obj_date。您现在有一个timedelta,您可以使用下面的方法获取秒数。

total_seconds()方法是在Python 2.7中引入的,并且您使用的是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

+0

对,没错......任何想法如何做到这一点的python2.4中我 – krisdigitx 2012-04-07 17:58:38

+0

添加了一个方法来计算的秒数,以我的答案。 – 2012-04-07 18:00:25

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 

这种方式,你会做两个日期时间之间的减法对象。

1

strftime将timey对象转换为字符串,strptime将字符串解析为timey对象。

因此n_date是一个字符串。