【问题标题】:Generate 10-min interval start and end times in Python在 Python 中生成 10 分钟的间隔开始和结束时间
【发布时间】:2021-05-11 20:35:06
【问题描述】:

我有一个任务,我需要在给定时间范围之间生成 10 分钟的间隔。例如,

开始时间 = '2020-09-02 17:33:04.472', end_time = '2020-09-02 20:19:14.859'

所需的输出:

start_times_list = ['2020-09-02 17:30:00', '2020-09-02 17:40:00', '2020-09-02 17:50:00', '2020-09-02 18:00:00', '2020-09-02 18:10:00', '2020-09-02 18:20:00', '2020-09-02 18:30:00', '2020-09-02 18:40:00','2020-09-02 18:50:00', '2020-09-02 19:00:00', '2020-09-02 19:10:00', '2020-09-02 19:20:00', '2020-09-02 19:30:00', '2020-09-02 19:40:00', '2020-09-02 19:50:00', '2020-09-02 20:00:00', '2020-09-02 20:10:00', '2020-09-02 20:20:00']

end_times_list = ['2020-09-02 17:40:00', '2020-09-02 17:50:00', '2020-09-02 18:00:00', '2020-09-02 18:10:00', '2020-09-02 18:20:00', '2020-09-02 18:30:00', '2020-09-02 18:40:00','2020-09-02 18:50:00', '2020-09-02 19:00:00', '2020-09-02 19:10:00', '2020-09-02 19:20:00', '2020-09-02 19:30:00', '2020-09-02 19:40:00', '2020-09-02 19:50:00', '2020-09-02 20:00:00', '2020-09-02 20:10:00', '2020-09-02 20:20:00', '2020-09-02 20:30:00']

我尝试了以下方法,它只创建从开始日期时间开始的日期范围,而不是从楼层(分钟)开始

import pandas as pd

l = (pd.DataFrame(columns=['NULL'],
                  index=pd.date_range('2020-09-02 17:33:04', '2020-09-02 20:19:14',
                                      freq='10T'))
       .between_time('07:00','22:00')
       .index.strftime('%Y-%m-%d %H:%M:%S')
       .tolist()
)
l

电流输出

['2020-09-02 17:33:04',
 '2020-09-02 17:43:04',
 '2020-09-02 17:53:04',
 '2020-09-02 18:03:04',
 '2020-09-02 18:13:04',
 '2020-09-02 18:23:04',
 '2020-09-02 18:33:04',
 '2020-09-02 18:43:04',
 '2020-09-02 18:53:04',
 '2020-09-02 19:03:04',
 '2020-09-02 19:13:04',
 '2020-09-02 19:23:04',
 '2020-09-02 19:33:04',
 '2020-09-02 19:43:04',
 '2020-09-02 19:53:04',
 '2020-09-02 20:03:04',
 '2020-09-02 20:13:04']

【问题讨论】:

    标签: python datetime timedelta


    【解决方案1】:

    您可以使用Timestamp.round() 将开始/结束时间四舍五入到 10 分钟。

    import pandas as pd
    from datetime import datetime
    
    start_time = '2020-09-02 17:33:04.472'
    
    end_time = '2020-09-02 20:19:14.859'
      
    start_times = pd.date_range(start= pd.Timestamp(start_time).round('10T'), end = pd.Timestamp(end_time).round('10T'), freq="10T")
    
    end_times = start_times + pd.Timedelta('10T')
    
    start_times_list = start_times.strftime('%Y-%m-%d %H:%M:%S').tolist()
    
    end_times_list = end_times.strftime('%Y-%m-%d %H:%M:%S').tolist()
    
    print(start_times_list)
    print(end_times_list)
    

    【讨论】:

    • 这仅适用于上述开始时间,即如果开始时间是 '2020-09-02 17:37:04.472',则列表开始时间显示从 '2020-09-02 17: 40:00'。您的轮函数正在占用 ceil 和 floor,但我总是希望 floor(min) 作为开始时间。
    • 我的用例应该是地板而不是圆形,不过谢谢!
    • 我实际上想知道这是否会成为问题 - 应该要求澄清。 :)
    【解决方案2】:

    如果您确定输入格式,可能最容易使用:

    newstarttime = starttime[:-8]+"0:00.000"
    

    【讨论】:

    • 开始时间总是动态的,而且会发生变化! @DriesDS
    • 是的,但格式保持不变,不是吗?还是有其他问题您不能使用此解决方案? @SakethGaruda
    【解决方案3】:
    import pandas as pd
    from datetime import datetime
    import math
    
    start_time = '2020-09-02 17:36:04.472'
    
    end_time = '2020-09-02 20:19:14.859'
      
    start_times = pd.date_range(start= pd.Timestamp(start_time).floor('10T'), end = pd.Timestamp(end_time).floor('10T'), freq="10T")
    
    end_times = start_times + pd.Timedelta('10T')
    
    start_times_list = start_times.strftime('%Y-%m-%d %H:%M:%S').tolist()
    
    end_times_list = end_times.strftime('%Y-%m-%d %H:%M:%S').tolist()
    
    print(start_times_list)
    print(end_times_list)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2022-01-07
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      相关资源
      最近更新 更多