根据Python中的时间间隔将时间范围拆分为多个时间段

Din*_*esh 6 python time python-3.x

我有一个时间范围和一个间隔,我需要根据间隔值将时间范围分成多个时间段。

例如,时间范围为 9:30 到 11:30,间隔为 30,输出时间段应作为日期时间对象放在列表中

输出:

[
2020-08-24 9:30 - 2020-08-24 10:00,
2020-08-24 10:00 - 2020-08-24 10:30 
2020-08-24 10:30 - 2020-08-24 11:00, 
2020-08-24 11:00 - 2020-08-24 11:30
]
Run Code Online (Sandbox Code Playgroud)

ala*_*ani 6

您可以datetime通过添加timedelta对象来对对象进行算术运算。

如果每个周期的间隔不是总数的精确除数,您可能需要准确决定需要什么行为,但在这种情况下,此示例将给出最终的短周期。

import datetime

tstart = datetime.datetime(2020,8,24,9,30)
tend = datetime.datetime(2020,8,24,11,30)
interval = datetime.timedelta(minutes=30)

periods = []

period_start = tstart
while period_start < tend:
    period_end = min(period_start + interval, tend)
    periods.append((period_start, period_end))
    period_start = period_end

print(periods)
Run Code Online (Sandbox Code Playgroud)

这给出了(为了可读性插入了换行符):

[(datetime.datetime(2020, 8, 24, 9, 30), datetime.datetime(2020, 8, 24, 10, 0)),
 (datetime.datetime(2020, 8, 24, 10, 0), datetime.datetime(2020, 8, 24, 10, 30)),
 (datetime.datetime(2020, 8, 24, 10, 30), datetime.datetime(2020, 8, 24, 11, 0)),
 (datetime.datetime(2020, 8, 24, 11, 0), datetime.datetime(2020, 8, 24, 11, 30))]
Run Code Online (Sandbox Code Playgroud)

对于您想要的字符串输出格式,您可以执行以下操作:

def format_time(dt):
    return dt.strftime("%Y-%m-%d %H:%M")

print(['{} - {}'.format(format_time(start), format_time(end))
       for start, end in periods])
Run Code Online (Sandbox Code Playgroud)

给予:

['2020-08-24 09:30 - 2020-08-24 10:00',
 '2020-08-24 10:00 - 2020-08-24 10:30',
 '2020-08-24 10:30 - 2020-08-24 11:00',
 '2020-08-24 11:00 - 2020-08-24 11:30']
Run Code Online (Sandbox Code Playgroud)

  • 除了执行“datetime.timedelta(0, 60) * 30”之外,您还可以执行“datetime.timedelta(分钟=30)” (2认同)

dea*_*hot 5

使用pandas.date_range

import pandas as pd

bins = pd.date_range(start='2020-08-24 9:30', end='2020-08-24 11:30', freq='30min').astype(str)
res = [' - '.join(x) for x in zip(bins[: -1], bins[1: ])]

print(res)
Run Code Online (Sandbox Code Playgroud)

输出:

['2020-08-24 09:30:00 - 2020-08-24 10:00:00',
 '2020-08-24 10:00:00 - 2020-08-24 10:30:00',
 '2020-08-24 10:30:00 - 2020-08-24 11:00:00',
 '2020-08-24 11:00:00 - 2020-08-24 11:30:00']
Run Code Online (Sandbox Code Playgroud)