Skip to main content
 首页 » 编程设计

python之如何将 python datetime-span 划分为等间隔的时间间隔

2025年05月04日12dyllove98

我有两个约会,就像:

date_a = datetime.datetime(2016, 8, 9, 8, 24, 30, 993352) 
date_b = datetime.datetime(2016, 8, 9, 7, 24, 30, 993352) 

我想要的是获取时间戳列表,这两个日期之间有五分钟的间隔。使用以上两个日期,结果将是:

five_min_timestamps = [ 
    datetime.datetime(2016, 8, 9, 7, 25, 0, 0) 
    datetime.datetime(2016, 8, 9, 7, 30, 0, 0) 
    datetime.datetime(2016, 8, 9, 7, 35, 0, 0) 
    datetime.datetime(2016, 8, 9, 7, 45, 0, 0) 
    datetime.datetime(2016, 8, 9, 7, 55, 0, 0) 
    datetime.datetime(2016, 8, 9, 8, 00, 0, 0) 
    datetime.datetime(2016, 8, 9, 8, 05, 0, 0) 
    datetime.datetime(2016, 8, 9, 8, 10, 0, 0) 
    datetime.datetime(2016, 8, 9, 8, 15, 0, 0) 
    datetime.datetime(2016, 8, 9, 8, 20, 0, 0) 
] 

我仍在尝试弄清楚如何实现一个函数(非常 pythonic),就像上面的描述一样发出时间戳。

要求是这两个日期(date_a 和 date_b)之间的范围将大于或小于该示例中的范围。因此,获取一整天甚至一周之间的间隔应该包含在该函数中。

请您参考如下方法:

不是非常 pythonic,但干净简洁:

from datetime import timedelta 
 
delta = timedelta(minutes=5) 
five_min_timestamps = [] 
date_x = date_a 
while date_x < date_b: 
  date_x += timedelta(minutes=5) 
  five_min_timestamps.append(date_x)  

另一种选择是使用列表理解:

 intervals = divmod((date_b - date_a).total_seconds(), 300) 
 five_min_timestamps = [date_a + i * datetime.timedelta(minutes=5) for i in range(intervals)] 

intervals 变量显示您需要在这个时间跨度内有多少个间隔(日期之间的差异除以 300)。

或者用一条语句:

five_min_timestamps = [ 
    date_a + i * datetime.timedelta(minutes=5) 
    for i in range( 
        divmod((date_b - date_a).total_seconds(), 300))]