我的日期范围是这样的:
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
我错误地使用了时间增量吗?
答案 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