2012-04-07 245 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是一個字符串。