首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据Python中的时间间隔将时间范围划分为多个时间段

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

Stack Overflow用户
提问于 2020-09-03 07:12:40
回答 2查看 2.5K关注 0票数 3

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

例如,时间范围为9:30至11: 30,间隔为30,输出时间段应以日期时间对象的形式出现在列表中。

输出:

代码语言:javascript
运行
复制
[
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
]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-03 07:20:55

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

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

代码语言:javascript
运行
复制
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)

这提供了(插入换行符以提高可读性):

代码语言:javascript
运行
复制
[(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))]

对于所需的字符串输出格式,可以执行如下操作:

代码语言:javascript
运行
复制
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])

给予:

代码语言:javascript
运行
复制
['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']
票数 4
EN

Stack Overflow用户

发布于 2020-09-03 07:31:11

使用范围

代码语言:javascript
运行
复制
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)

输出:

代码语言:javascript
运行
复制
['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']
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63718582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档