【问题标题】:generate a range of datetime dates生成一系列日期时间日期
【发布时间】:2021-12-19 21:22:34
【问题描述】:

我正在尝试生成一个开始日期列表,我将使用它来抓取谷歌趋势。我需要相隔 3 小时的开始日期,然后我将根据开始日期以 4 小时为增量生成结束日期,因此结束日期与下一个开始日期重叠 1 小时。

from datetime import datetime, timedelta, date
import pandas as pd
import time

start='2018-06-05T01'
end='2020-11-01T23'

start_date = datetime.strptime(start, '%Y-%m-%dT%H')
end_date = datetime.strptime(end, '%Y-%m-%dT%H')

delta = timedelta(hours=3)

while True:
    date_list = []
    date_list.append(start_date + delta)
    if start_date >= end:
        break

这似乎不起作用,我不知道如何解决它,因为我不知道如何在结束日期到来之前继续循环。

【问题讨论】:

    标签: python list datetime


    【解决方案1】:

    既然你一直在使用pandas,请尝试使用date_range

    start_date = pd.to_datetime(start, format='%Y-%m-%dT%H')
    end_date = pd.to_datetime(end, format='%Y-%m-%dT%H')
    date_list = pd.date_range(start_date, end_date, freq="3H")
    
    >>> date_list
    DatetimeIndex(['2018-06-05 01:00:00', '2018-06-05 04:00:00',
                   '2018-06-05 07:00:00', '2018-06-05 10:00:00',
                   '2018-06-05 13:00:00', '2018-06-05 16:00:00',
                   '2018-06-05 19:00:00', '2018-06-05 22:00:00',
                   '2018-06-06 01:00:00', '2018-06-06 04:00:00',
                   ...
                   '2020-10-31 19:00:00', '2020-10-31 22:00:00',
                   '2020-11-01 01:00:00', '2020-11-01 04:00:00',
                   '2020-11-01 07:00:00', '2020-11-01 10:00:00',
                   '2020-11-01 13:00:00', '2020-11-01 16:00:00',
                   '2020-11-01 19:00:00', '2020-11-01 22:00:00'],
                  dtype='datetime64[ns]', length=7048, freq='3H')
    

    如果您不希望这是一个 DatetimeIndex,您可以使用:

    date_list = pd.date_range(start_date, end_date, freq="3H").tolist()
    

    【讨论】:

      【解决方案2】:

      您的代码将一个空列表分配给date_list,并且start_date 在每次迭代中都不会更改。 end 变量是一个字符串,而不是像 end_date 这样的日期时间。

      【讨论】:

        【解决方案3】:

        正如 user5401398 指出的,你应该

        1. date_list 移到循环外
        2. 在循环中更新start_date
        3. 比较 end_date 而不是 end 变量,它是一个字符串。

        修改版本如下。

        from datetime import datetime, timedelta, date
        
        start='2018-06-05T01'
        end='2020-11-01T23'
        
        start_date = datetime.strptime(start, '%Y-%m-%dT%H')
        end_date = datetime.strptime(end, '%Y-%m-%dT%H')
        
        delta = timedelta(hours=3)
        
        date_list = [start_date]
        
        while True:
            start_date += delta
            date_list.append(start_date)
            if start_date >= end_date:
                break
        print(date_list)
        

        【讨论】:

          猜你喜欢
          • 2012-12-15
          • 2011-05-27
          • 2021-08-15
          • 1970-01-01
          • 2023-02-02
          • 2014-04-19
          • 2010-09-21
          • 2014-01-29
          • 1970-01-01
          相关资源
          最近更新 更多