簡體   English   中英

在 python 中的時間范圍內的時間分布為 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'}]

使用

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM