python错误:不支持的操作数类型 - :' str'和' str'

时间:2015-12-31 17:18:44

标签: python python-2.7 datetime

我正在尝试让变量stop_date从变量start_date中取走值,以获得30的返回输出。

当我尝试这个时:

start_date = '20151231171500'
stop_date = '20151231174500'
test = stop_date - start_date
print test

它给我一个错误:TypeError:不支持的操作数类型 - :' str'和' str'

错误是跳到这一行:

test = stop_date - start_date

我正在尝试将日期格式转换为剩余时间的分钟数。

2 个答案:

答案 0 :(得分:4)

你有字符串,而不是日期时间对象。如果要将字符串视为日期时间信息,则需要将它们解析为datetime个对象:

from datetime import datetime

start_date = datetime.strptime(start_date, '%Y%m%d%H%M%S')
stop_date = datetime.strptime(stop_date, '%Y%m%d%H%M%S')

difference = stop_date - start_date

生成的对象是datetime.timedelta() instance,它按天和秒来模拟持续时间:

>>> from datetime import datetime
>>> start_date = '20151231171500'
>>> stop_date = '20151231174500'
>>> start_date = datetime.strptime(start_date, '%Y%m%d%H%M%S')
>>> stop_date = datetime.strptime(stop_date, '%Y%m%d%H%M%S')
>>> start_date, stop_date
(datetime.datetime(2015, 12, 31, 17, 15), datetime.datetime(2015, 12, 31, 17, 45))
>>> difference = stop_date - start_date
>>> difference
datetime.timedelta(0, 1800)
>>> difference.seconds
1800

打印timedelta对象将其格式化以显示天数(如果有),小时,分钟和秒:

>>> print difference
0:30:00

或者您可以通过除以60来计算分钟数。如果您使用divmod() function,您还可以在几秒钟内得到余数:

>>> minutes, seconds = divmod(difference.seconds, 60)
>>> minutes, seconds
(30, 0)

使用您计算的minutes再次执行此操作以获得时间:

>>> hours, minutes = divmod(minutes, 60)
>>> hours, minutes, seconds
(0, 30, 0)

请注意,如果您想记录超过24小时的总小时数,您还可以使用timedelta.total_seconds() method来包含日期。

答案 1 :(得分:1)

start_datestop_date是字符串,不支持-运算符。如果要计算它们的(数值)差异,请将它们定义为整数,即

start_date = 20151231171500
stop_date = 20151231174500

或将它们投放到int

test = int(stop_date) - int(start_date)

警告:这些数字的差异将是3000,而不是30.不确定为什么你期望30。

编辑:这就是为什么你不能从字符串中减去字符串的原因。要计算日期之间的实际时差,请参阅Martijn的答案。