将开始日期按小时递增,直到达到结束日期

时间:2019-02-27 00:46:20

标签: python datetime

我的日期范围是这样的:

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

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

3 个答案:

答案 0 :(得分:2)

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

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

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

完整的固定代码:

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

答案 1 :(得分:1)

pandas具有称为date_range的强大功能:

import pandas as pd

start_date ='2018-01-01T00:00:00'
end_date ='2018-01-31T23:59:59'
pd.date_range(start_date, end_date, freq='1h')
DatetimeIndex(['2018-01-01 00:00:00', '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-31 14:00:00', '2018-01-31 15:00:00',
               '2018-01-31 16:00:00', '2018-01-31 17:00:00',
               '2018-01-31 18:00:00', '2018-01-31 19: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'],
              dtype='datetime64[ns]', length=744, freq='H')

答案 2 :(得分:0)

尝试一下:

import datetime

start_date ='2018-01-01T00:00:00'
end_date ='2018-01-31T23:59:59'
start = datetime.datetime.strptime(start_date, '%Y-%m-%dT%H:%M:%S')
end = datetime.datetime.strptime(end_date, '%Y-%m-%dT%H:%M:%S')
while start<end: 
    start += datetime.timedelta(hours=1)
    print(start) 

结果:

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-31 21:00:00
2018-01-31 22:00:00
2018-01-31 23:00:00
2018-02-01 00:00:00