использование модуля datetime для печати времени с шагом заданного времени дельты - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь понять модуль Python datetime. Я хочу увеличить время на 5 минут между двумя интервалами. Это то, что я сделал,

import datetime
start_time = datetime.datetime(100,1,1,8,0,0) # 8am
end_time = datetime.datetime(100,1,1,9,00,0) # 9am
delta_time = datetime.timedelta(0,300) # 5min intervals 


new_time = start_time + delta_time 
print(new_time.time())

это дает 08:05:00. Я хочу, чтобы результат был следующим:

08:05:00
08:10:00
08:15:00

Как получить остальное время проще? Я получаю сообщение об ошибке, если использую цикл for.

Ответы [ 4 ]

2 голосов
/ 11 ноября 2019

В одну сторону, используя pandas.date_range:

import pandas as pd

t_series = pd.date_range('08:05:00', '09:00:00', freq='5 min')

Если вы хотите только время (как показано), используйте pandas.Series.dt.time:

for t in t_series.to_series().dt.time:
    print(t)

Выход:

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
1 голос
/ 11 ноября 2019

Вот один из подходов:

import datetime
h=8 # The starting hour
end_h=10 #the ending hour
m=0
delta=5 #delta value
while h<end_h:
    if m>55:
        h+=1
        m=0
    new_time=datetime.datetime(100,1,1,h,m,0)
    print(new_time.time())
    m=m+delta

Вывод:

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

Ограничение: этот метод работает для максимального значения end_h = 24.

1 голос
/ 11 ноября 2019

Это просто с помощью функции range и преобразования минут в секунды и наоборот.
Код использует выражение генератора, чтобы получить серию объектов datetime, а не понимание списка,Если нужно понять разницу между ними, очень легко найти тонны информации об этом в Переполнение стека .

from pprint import pprint # https://docs.python.org/3.5/library/pprint.html#pprint.pprint
from datetime import datetime, timedelta
f = '%m/%d/%Y:%H:%M:%S'
beg, fin = [datetime.strptime(d, f) for d in ['10/25/2015:00:00:05', '10/25/2015:23:59:58']]
step = 5 # minutes
ts = (beg + timedelta(minutes=s // 60) for s in range(0, int((fin - beg).total_seconds() + 1), step * 60))
pprint([t.strftime(f) for t in ts])

Вывод:

['10/25/2015:00:00:05',
 '10/25/2015:00:05:05',
 '10/25/2015:00:10:05',
...
'10/25/2015:23:45:05',
 '10/25/2015:23:50:05',
 '10/25/2015:23:55:05']

Демо .

1 голос
/ 11 ноября 2019

Если вы хотите сделать это, используя datetime, попробуйте цикл while следующим образом:

import datetime

start_time = datetime.datetime(100,1,1,8,0,0) # 8am
end_time = datetime.datetime(100,1,1,9,00,0) # 9am
delta_time = datetime.timedelta(0, 300) # 5min intervals

new_time = start_time
while new_time != end_time:
    new_time += delta_time
    print(new_time.time())

Вот что вы получите:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...