python错误:不支持-:';str';和';str';

python错误:不支持-:';str';和';str';,python,python-2.7,datetime,Python,Python 2.7,Datetime,我试图获取变量stop\u date以从变量start\u date中删除值,以获取返回输出30 当我尝试这个: start_date = '20151231171500' stop_date = '20151231174500' test = stop_date - start_date print test 它给了我一个错误:TypeError:-:'str'和'str'的操作数类型不受支持 错误正在该行上跳转: test = stop_date - start_date 我正在尝试将日

我试图获取变量
stop\u date
以从变量
start\u date
中删除值,以获取返回输出
30

当我尝试这个:

start_date = '20151231171500'
stop_date = '20151231174500'
test = stop_date - start_date
print test
它给了我一个错误:TypeError:-:'str'和'str'的操作数类型不受支持

错误正在该行上跳转:

test = stop_date - start_date

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

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

start_date = 20151231171500
stop_date = 20151231174500
或将其强制转换为
int

test = int(stop_date) - int(start_date)
警告:这些数字的差值是3000,而不是30。不知道你为什么期望30岁


编辑:关于为什么不能从字符串中减去字符串,已经讲了很多。要计算日期之间的实际时差,请参阅Martijn的答案。

您有字符串,而不是datetime对象。如果要将字符串视为日期时间信息,则需要将其解析为
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
生成的对象是,它以天和秒为单位对持续时间进行建模:

>>> 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
>>> print difference
0:30:00
打印
timedelta
对象将其格式化为显示天(如果有)、小时、分钟和秒:

>>> 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
>>> print difference
0:30:00
或者你可以用60除以分钟数。如果使用,则在几秒钟内也会得到剩余值:

>>> minutes, seconds = divmod(difference.seconds, 60)
>>> minutes, seconds
(30, 0)
再次对
minutes
进行同样的计算,得到小时数:

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

请注意,如果您想记录24小时内的总小时数,您也可以使用来包括天数。

如何从字符串中减去?@Padriac:当然我们可以找到一个处理日期时间信息的dupe?但它们不是整数。它们是日期。将字符串视为整数会得到错误的结果;差别是1800秒,而不是3000秒。@MartijnPieters你是对的,当然,我没听清楚。我留下了一条编辑信息,指向你的答案,因为它更好地解决了提问者的实际需求。非常感谢你,我如何删除前两个值后
00
末尾的两个零,使其返回为
30
?@David:你的问题还不清楚。您希望将这两个值视为日期和时间,并希望以分钟为单位了解它们之间的差异。这个问题的答案确实是30,但是正确命名你正在做的事情,你会更快得到答案。非常感谢你的回答,如何删除前两个值
30
00
末尾的两个零,使其返回为
30
?@David:我已经添加了如何从增量计算小时和分钟。你的问题一定要精确,你在寻找几分钟内的差异。