Формирование списка 5-минутного интервала между двумя - PullRequest
0 голосов
/ 25 марта 2020

У меня есть следующие строки:

start = "07:00:00"
end = "17:00:00"

Как мне создать список с 5-минутным интервалом между этими временами, ie

["07:00:00","07:05:00",...,"16:55:00","17:00:00"]

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Попробуйте :

# import modules
from datetime import datetime, timedelta

# Create starting and end datetime object from string
start = datetime.strptime("07:00:00", "%H:%M:%S")
end = datetime.strptime("17:00:00", "%H:%M:%S")

# min_gap
min_gap = 5

# compute datetime interval
arr = [(start + timedelta(hours=min_gap*i/60)).strftime("%H:%M:%S")
       for i in range(int((end-start).total_seconds() / 60.0 / min_gap))]
print(arr)
# ['07:00:00', '07:05:00', '07:10:00', '07:15:00', '07:20:00', '07:25:00', '07:30:00', ..., '16:55:00']

Пояснения :

  1. Сначала необходимо преобразовать string дату в объект даты и времени , strptime делает это!
  2. Затем мы найдем количество минут между начальной датой и конечной датой-временем. Это обсуждение решило это! Мы можем сделать это следующим образом:
(end-start).total_seconds() / 60.0

Однако в нашем случае мы хотим повторять только каждые n минуты. Итак, в нашем loop нам нужно разделить его на n.

Кроме того, поскольку мы будем повторять это количество минут, нам нужно преобразовать в int для for l oop. В результате:

int((end-start).total_seconds() / 60.0 / min_gap)

Затем на каждом элементе нашего l oop мы добавим количество минут к начальной дате и времени. Функция tiemdelta была разработана для. В качестве параметра мы указываем количество часов, которое мы хотим добавить: min_gap*i/60.

Наконец, мы конвертируем этот объект datetime обратно в строковый объект, используя strftime .

1 голос
/ 25 марта 2020

Это работает для меня, я уверен, что вы можете выяснить, как поместить результаты в список вместо их распечатки:

>>> import datetime
>>> start = "07:00:00"
>>> end = "17:00:00"
>>> delta = datetime.timedelta(minutes=5)
>>> start = datetime.datetime.strptime( start, '%H:%M:%S' )
>>> end = datetime.datetime.strptime( end, '%H:%M:%S' )
>>> t = start
>>> while t <= end :
...     print datetime.datetime.strftime( t, '%H:%M:%S')
...     t += delta
... 
07:00:00
07:05:00
07:10:00
07:15:00
07:20:00
07:25:00
07:30:00
07:35:00
07:40:00
07:45:00
07:50:00
07:55:00
08:00:00
08:05:00
08:10:00
08:15:00
08:20:00
08:25:00
08:30:00
08:35:00
08:40:00
08:45:00
08:50:00
08:55:00
09:00:00
09:05:00
09:10:00
09:15:00
09:20:00
09:25:00
09:30:00
09:35:00
09:40:00
09:45:00
09:50:00
09:55:00
10:00:00
10:05:00
10:10:00
10:15:00
10:20:00
10:25:00
10:30:00
10:35:00
10:40:00
10:45:00
10:50:00
10:55:00
11:00:00
11:05:00
11:10:00
11:15:00
11:20:00
11:25:00
11:30:00
11:35:00
11:40:00
11:45:00
11:50:00
11:55:00
12:00:00
12:05:00
12:10:00
12:15:00
12:20:00
12:25:00
12:30:00
12:35:00
12:40:00
12:45:00
12:50:00
12:55:00
13:00:00
13:05:00
13:10:00
13:15:00
13:20:00
13:25:00
13:30:00
13:35:00
13:40:00
13:45:00
13:50:00
13:55:00
14:00:00
14:05:00
14:10:00
14:15:00
14:20:00
14:25:00
14:30:00
14:35:00
14:40:00
14:45:00
14:50:00
14:55:00
15:00:00
15:05:00
15:10:00
15:15:00
15:20:00
15:25:00
15:30:00
15:35:00
15:40:00
15:45:00
15:50:00
15:55:00
16:00:00
16:05:00
16:10:00
16:15:00
16:20:00
16:25:00
16:30:00
16:35:00
16:40:00
16:45:00
16:50:00
16:55:00
17:00:00
>>>
...