首页 > 解决方案 > 按小时递增开始日期,直到到达结束日期

问题描述

我有这样的日期范围:

start_date ='2018-01-01T00:00:00'
end_date ='2018-01-31T23:59:59'

将其转换为对象:

start_date_object = datetime.strptime(start_date, '%Y-%m-%dT%H:%M:%S')
end_date_object = datetime.strptime(end_date, '%Y-%m-%dT%H:%M:%S')

我正在尝试编写一个函数,它将获取开始日期并将其增加 1 小时,直到它到达结束日期,如下所示:

def daterange(start,end):
    while start <= end :
        start = start + timedelta(hours=1)
        print

daterange(start_date_object,end_date_object)

但目前我的输出是这样的:

2018-01-01 00:00:00
2018-01-01 01:00:00
2018-01-01 01:00:00

我希望它能做到这一点

2018-01-01 00:00:00
2018-01-01 01:00:00
2018-01-01 02:00:00
...
..
2018-01-31 23:59:59

我是否错误地使用了时间增量?

标签: pythondatetime

解决方案


您需要end_date_object使用end_date而不是start_dateie 来初始化变量:

end_date_object = datetime.strptime(end_date, '%Y-%m-%dT%H:%M:%S')

此外,要获得2018-01-31 23:59:59您需要使用的最后一行<而不是<=在您的 while 循环中,然后start在最后一次在 while 循环之外打印它之前减去 1 秒:

完整的固定代码:

from datetime import datetime
from datetime import timedelta

def daterange(start, end):
  while start < end:
    print(start)
    start += timedelta(hours=1)
  print(start - timedelta(seconds=1)) # To get the XX:XX:59:59 for the last line

start_date ='2018-01-01T00:00:00'
end_date ='2018-01-31T23:59:59'

start_date_object = datetime.strptime(start_date, '%Y-%m-%dT%H:%M:%S')
end_date_object = datetime.strptime(end_date, '%Y-%m-%dT%H:%M:%S')

daterange(start_date_object, end_date_object)

输出:

2018-01-01 01:00:00
2018-01-01 02:00:00
2018-01-01 03:00:00
2018-01-01 04:00:00
2018-01-01 05:00:00
2018-01-01 06:00:00
2018-01-01 07:00:00
2018-01-01 08:00:00
2018-01-01 09:00:00
2018-01-01 10:00:00
.
.
.
2018-01-31 20:00:00
2018-01-31 21:00:00
2018-01-31 22:00:00
2018-01-31 23:00:00
2018-01-31 23:59:59

推荐阅读