python - Python:每小时迭代两个日期时间
问题描述
这是问题:
使用 python 的 datetime 模块,创建一个迭代器,生成两个 datetime.datatime 对象之间的所有时间。
it = hourly_it( d1, d2)
# whered1
和d2
是datetime.datetime
对象。例如,
from datetime import datetime
it = hourly_it( datetime(2018, 10, 2, 12), datetime(2018, 10, 3, 12))
将生成 11 月 2 日 12:00(中午)到 11 月 3 日 12:00(中午)之间的所有日期时间。
这是我的代码:
from datetime import date, timedelta as td, datetime
def hourly_it( d1, d2) :
start = d1
finish = d2
def f():
nonlocal start, finish
if(start>=finish): return None
start += td(hours=1)
return start
return f
当我使用以下方法测试代码时:
from datetime import datetime
it = hourly_it( datetime(2018, 10, 2, 12), datetime(2018, 10, 3,12))
print(next(it))
我收到此错误:
TypeError Traceback(最近一次调用最后一次)
in () 1 from datetime import datetime 2 it = hourly_it( datetime(2018, 10, 2, 12), datetime(2018, 10, 3, 12))
----> 3 打印(下一个(它))
TypeError:“函数”对象不是迭代器
我想到了。谢谢大家。这是不使用生成器的方法。我还应该注意,我在返回前加上了 +1 小时并设置了开始 >=
from datetime import date, timedelta as td, datetime
def hourly_it( d1, d2) :
start = d1
finish = d2
def f():
nonlocal start, finish
if(start>=finish): return None
start += td(hours=1)
return start
return iter(f,None)
解决方案
我几乎可以肯定这是你在那里的学校作业。
但是我会给你一些关于 python 的迭代器协议的阅读,以及简短而甜蜜的例子,也许你明白了;无论如何,它不是火箭科学。
>>> from datetime import datetime, timedelta
>>> def hourly_it(start, finish):
... while finish > start:
... start = start + timedelta(hours=1)
... yield start
>>> start = datetime(2018, 10, 2, 12)
>>> finish = datetime(2018, 10, 3, 12)
>>> for hour in hourly_it(start, finish):
... print(hour)
...
2018-10-02 13:00:00
2018-10-02 14:00:00
2018-10-02 15:00:00
2018-10-02 16:00:00
2018-10-02 17:00:00
2018-10-02 18:00:00
2018-10-02 19:00:00
2018-10-02 20:00:00
2018-10-02 21:00:00
2018-10-02 22:00:00
2018-10-02 23:00:00
2018-10-03 00:00:00
2018-10-03 01:00:00
2018-10-03 02:00:00
2018-10-03 03:00:00
2018-10-03 04:00:00
2018-10-03 05:00:00
2018-10-03 06:00:00
2018-10-03 07:00:00
2018-10-03 08:00:00
2018-10-03 09:00:00
2018-10-03 10:00:00
2018-10-03 11:00:00
2018-10-03 12:00:00
推荐阅读
- php - 数据表和插入表单在一起时的路由方法
- c - 防止 Keil uVision 中布尔值的“枚举类型与另一种类型混合”警告
- node.js - bot 框架默认对话框未触发
- bash - 如何在文件的特定空行中插入文本(bash)
- python - python中的IOError同时滑动查询结果
- asp.net - 使用 oracle 12c 无法正确获取数据到 asp.net 应用程序
- asp.net - 竹子“合并”旧建筑和新建筑
- html - (SQL ORACLE)如何生成 html 输出,给定 select 语句?
- laravel - Laravel (5.6) 服务提供者
- docker - 将 SSL 证书添加到 NGINX docker 容器