我正在尝试让变量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
我正在尝试将日期格式转换为剩余时间的分钟数。
答案 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_date
和stop_date
是字符串,不支持-
运算符。如果要计算它们的(数值)差异,请将它们定义为整数,即
start_date = 20151231171500
stop_date = 20151231174500
或将它们投放到int
:
test = int(stop_date) - int(start_date)
警告:这些数字的差异将是3000,而不是30.不确定为什么你期望30。
编辑:这就是为什么你不能从字符串中减去字符串的原因。要计算日期之间的实际时差,请参阅Martijn的答案。