![](/img/trans.png)
[英]How many hours between two time?(unsupported operand type(s) for -: 'datetime.time' and 'datetime.time')
[英]distribution of hours between a time range as datetime.time in python
我有两次,我想使用 Python 中的相同格式列出它们之间的所有时间。
正如我所拥有的
start_time: 08:00:00
end_time: 13:00:00
我想列出他们之间的小时数。 从头到尾都是这样(08:00:00 - 13:00:00)。
[
{
start: 08:00:00,
end: 09:00:00
},
{
start: 09:00:00,
end: 10:00:00
},
{
start: 10:00:00,
end: 11:00:00
},
{
start: 11:00:00,
end: 12:00:00
},
{
start: 12:00:00,
end: 13:00:00
}
]
一小时范围分布设置在一个时间范围之间。 我正在使用 pandas 但它在日期分配方面非常方便,但无法按时应用。 我想知道 python 中的有效方法是什么。
这应该有效,可能不是最有效的
start_time= datetime.strptime('08:00:00','%H:%M:%S')
end_time= datetime.strptime('13:00:00','%H:%M:%S')
[{'start':start_time.replace(hour=i),'end':start_time.replace(hour=i+1)} for i in range(start_time.hour,end_time.hour)]
Output:
[{'start': datetime.datetime(1900, 1, 1, 8, 0),
'end': datetime.datetime(1900, 1, 1, 9, 0)},
{'start': datetime.datetime(1900, 1, 1, 9, 0),
'end': datetime.datetime(1900, 1, 1, 10, 0)},
{'start': datetime.datetime(1900, 1, 1, 10, 0),
'end': datetime.datetime(1900, 1, 1, 11, 0)},
{'start': datetime.datetime(1900, 1, 1, 11, 0),
'end': datetime.datetime(1900, 1, 1, 12, 0)},
{'start': datetime.datetime(1900, 1, 1, 12, 0),
'end': datetime.datetime(1900, 1, 1, 13, 0)}]
你可以做:
注意:我假设您的 start_time、end_time 是字符串
from datetime import datetime
from datetime import timedelta
f = '%H:%M:%S'
begin = datetime.strptime(start_time, f)
end = datetime.strptime(end_time, f)
duration = ((end-begin).seconds) // 3600
out = [{'start': (begin + timedelta(hours=i)).strftime(f),
'end': (begin + timedelta(hours=i + 1)).strftime(f)} for i in
range(duration)]
打印出):
[{'start': '08:00:00', 'end': '09:00:00'},
{'start': '09:00:00', 'end': '10:00:00'},
{'start': '10:00:00', 'end': '11:00:00'},
{'start': '11:00:00', 'end': '12:00:00'},
{'start': '12:00:00', 'end': '13:00:00'}]
使用pandas :
start_time = '08:00:00'
end_time = '13:00:00'
s = pd.Series(pd.date_range(start_time, end_time, freq='H')
.strftime('%H:%M:%S'))
out = (pd.DataFrame({'start': s, 'end':s.shift(-1)})
.iloc[:-1]
.to_dict('records')
)
output:
[{'start': '08:00:00', 'end': '09:00:00'},
{'start': '09:00:00', 'end': '10:00:00'},
{'start': '10:00:00', 'end': '11:00:00'},
{'start': '11:00:00', 'end': '12:00:00'},
{'start': '12:00:00', 'end': '13:00:00'}]
您可以轻松地推广到任何频率。 例如freq='2.5H'
/ freq='150min'
:
[{'start': '08:00:00', 'end': '10:30:00'},
{'start': '10:30:00', 'end': '13:00:00'}]
您还可以使用pd.date_range
:
[{'start':(item - pd.Timedelta(hours=1)).strftime('%H:%M:%S') , 'end':item.strftime('%H:%M:%S')} for item in list(pd.date_range('08:00:00', '13:00:00', freq='H'))[1:]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.