python - 按小时递增开始日期,直到到达结束日期
问题描述
我有这样的日期范围:
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
我是否错误地使用了时间增量?
解决方案
您需要end_date_object
使用end_date
而不是start_date
ie 来初始化变量:
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
推荐阅读
- javascript - 如何测试使用钩子且不返回 JSX 的 ReactJS 函数
- reactjs - 无法将 ref 添加到克隆的元素
- r - 在 R 中按顺序切割的画线
- sql - 分层随机样本以匹配 BigQuery 中的不同表
- wpf - 关于扩展现有样式的新控件的结构问题
- matlab - matlab中的while语法
- django - django .values,用逗号连接孩子
- identityserver4 - 在使用 AddIdentityExpressAdminUiConfiguration() 而不是 AddDefaultIdentity() 时如何指定 SignIn.RequireConfirmedAccount?
- firebase - 为什么 moment.js 日期提前 50 年?
- android - 在 RecyclerView 适配器中使用的正确上下文