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

更新:

我现在用

n_date = datetime.datetime.now()

但total_seconds() 在python2.4 中不起作用??知道如何减去两个日期时间对象并获得小时差吗?

4

5 回答 5

2

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

于 2012-04-07T17:53:08.287 回答
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

于 2012-04-07T17:53:35.377 回答
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

这样,您将在两个日期时间对象之间进行减法。

于 2012-04-07T17:54:33.103 回答
1

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

因此 n_date 是一个字符串。

于 2012-04-07T17:55:16.090 回答
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()

 打印“创建日期:”,c_date
 打印“当前日期:”,n_date

 absdiff = abs(n_date - c_obj_date)
 小时 = (absdiff.days * 24 * 60 * 60 + absdiff.seconds) / 3600.0

 打印时间
于 2012-04-07T17:58:37.437 回答