【问题标题】:Generate list of datetimes with hourly timedelta使用每小时 timedelta 生成日期时间列表
【发布时间】:2018-02-07 03:10:02
【问题描述】:

我正在使用此代码生成一系列每小时的datetime

from datetime import datetime, timedelta

def daterange(start_date, end_date):
    # timedelta only has days and seconds attributes
    for n in range(int ((end_date - start_date).seconds/3600 + 1)):
        yield start_date + timedelta(n)

start_date = datetime(2013, 1, 1, 14, 00)
end_date = datetime(2015, 6, 2, 5, 00)
for single_date in daterange(start_date, end_date):
    print single_date.strftime("%Y-%m-%d %H:%M")

但我得到了意想不到的结果:

2013-01-01 14:00
2013-01-02 14:00
2013-01-03 14:00
2013-01-04 14:00
2013-01-05 14:00
2013-01-06 14:00
2013-01-07 14:00
2013-01-08 14:00
2013-01-09 14:00
2013-01-10 14:00
2013-01-11 14:00
2013-01-12 14:00
2013-01-13 14:00
2013-01-14 14:00
2013-01-15 14:00
2013-01-16 14:00

如何使用timedelta seconds 属性更好地指定每小时间隔?我宁愿不使用像 NumPy 这样的外部包。

【问题讨论】:

    标签: python datetime timedelta hour


    【解决方案1】:

    您可以直接构建timedelta,然后添加like:

    代码:

    def daterange(start_date, end_date):
        delta = timedelta(hours=1)
        while start_date < end_date:
            yield start_date
            start_date += delta
    

    测试代码:

    from datetime import datetime, timedelta
    
    start_date = datetime(2013, 1, 1, 14, 00)
    end_date = datetime(2015, 6, 2, 5, 00)
    for single_date in daterange(start_date, end_date):
        print(single_date.strftime("%Y-%m-%d %H:%M"))
    

    结果:

    2013-01-01 14:00
    2013-01-01 15:00
    2013-01-01 16:00
    2013-01-01 17:00
    2013-01-01 18:00
    2013-01-01 19:00
    2013-01-01 20:00
    2013-01-01 21:00
    2013-01-01 22:00
    2013-01-01 23:00
    2013-01-02 00:00
    2013-01-02 01:00
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2022-11-21
      • 2021-12-19
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      相关资源
      最近更新 更多