一个python库,用于指定重复的时间规则并获取时间戳作为回报。

turoboro的Python项目详细描述


CircleCIAlt text

图罗博罗

一个python库,用于指定重复的时间规则并获取时间戳作为回报。

典型的用法是阐明重复规则的行为并得到确切的点 及时执行这些规则

也就是说,这个库回答了以下问题:

给定一个循环规则,

  1. 下次是什么时候?
  2. 什么时候会发生这种事?
  3. 什么时候会发生这种事

例如,你想知道“每周四 每两个月的第三个星期,UTC时间8点。

问图罗博罗!

不过,这项工作正在进行中。所以…基本上还不用这个库。

安装

$ pip install turoboro

用法

turoboro允许您设置三个主要时间的重复规则:

  1. 带结束日期,或
  2. 在一定数量的事件之后结束,或者
  3. 那是无限的

所有定期规则都必须有开始datetime(默认为现在)。

让我们一次一个地看

每日规则示例

>>> import turoboro
>>> from datetime import datetime
>>> rule = turoboro.DailyRule(start=datetime(2014, 1, 1))
>>> rule.every_nth_day(2).on_hour(8)
DailyRule: Starts on: 2014-01-01T08:00:00, repeats every 2 days at 8 o'clock, forever.
>>> rule.except_weekdays(*turoboro.WEEKEND)
DailyRule: Starts on: 2014-01-01T08:00:00, repeats every 2 days at 8 o'clock, forever. Except days Saturday, Sunday.
>>> rule.end_on(datetime(2014, 1, 31))
DailyRule: Starts on: 2014-01-01T08:00:00, repeats 2 days at 8 o'clock, until 2014-02-01T00:00:00. Except days Saturday, Sunday. 

好的,现在我们有一个DailyRule类的实例

您还可以仅使用构造函数来实例化完全相同的东西:

>>> rule = turoboro.DailyRule(
...     datetime(2014, 1, 1), every_nth_day=2, except_weekdays=turoboro.WEEKEND,
...     end_on=datetime(2014, 1, 31), on_hour=8
... )

让我们看看这个问题的实际解决时间。

>>> computed = rule.compute()
>>> computed.first
'2014-01-01T08:00:00'
>>> computed.last
'2014-01-31T08:00:00'
>>> computed.count
12
>>> computed.all
['2014-01-01T08:00:00', '2014-01-03T08:00:00', '2014-01-07T08:00:00', '2014-01-09T08:00:00',
 '2014-01-13T08:00:00', '2014-01-15T08:00:00', '2014-01-17T08:00:00', '2014-01-21T08:00:00',
 '2014-01-23T08:00:00', '2014-01-27T08:00:00', '2014-01-29T08:00:00', '2014-01-31T08:00:00']

为了方便起见,您可以获得一个生成器函数的句柄,该函数将遍历 整套,例如:

>>> result = rule.result()
>>> next(result)
'2014-01-01T08:00:00'
>>> next(result)
'2014-01-03T08:00:00'
>>> [r for r in result]
['2014-01-07T08:00:00', '2014-01-09T08:00:00', '2014-01-13T08:00:00', '2014-01-15T08:00:00',
'2014-01-17T08:00:00', '2014-01-21T08:00:00', '2014-01-23T08:00:00', '2014-01-27T08:00:00',
'2014-01-29T08:00:00', '2014-01-31T08:00:00']

每日规则的变化

您不必提供结束日期-您可以提供许多事件 或者用turobororepeat_n_times的行话。因此:

>>> rule.repeat_n_times(10)
# ValueError: You may not specify both an end date and a repeat count

哎呀,让我们先终止结束日期(因为让我们明确我们的意图)

>>> rule.end_on(None).repeat_n_times(100)
DailyRule: Starts on: 2014-01-01T08:00:00, repeats 2 days at 8 o'clock, 100 times. Except days Saturday, Sunday.

您还可以通过省略提供结束日期或 事件。computed.firstcomputed.lastcomputed.all属性仍将 return的行为类似于结果是一个有界集(默认为100个引用)但是,通过 使用rule.result()生成器函数,可以在 rule.compute()会给的但不是无限远,所以在生成器中迭代 最终将停止,其速度取决于使用指定的批处理大小 关键字max_count_if_infinite一个max_count_if_infinite=2可能会给你结果 未来几年。

>>> result = rule.result(max_count_if_infinite=2)
>>> [r for r in result] # 1974 results

从本质上说——迭代无限的日期时间集并不是很有用因为,嗯。。。 他们永远不会结束然而,一旦你有了“无限”规则,你总能找到下一个 通过简单地告诉computeresult并指定 from_dt参数,例如:

>>> result = rule.result(from_dt=datetime.utcnow())
>>> next(result)
'2019-06-26T08:00:00'

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
日期和现在之间的Java时间   java以适当的方式更新jLabel和jTextField   java如何从PQ(单链表)中删除最大值   java可以通过任何方式找出哪些NSF文件属于Domino服务器   java Velocity 2不会设置属性   如何使用java流迭代索引映射列表   maven依赖项在编译期间工作,但在java运行时失败。lang.NoClassDefFoundError&java。lang.ClassNotFoundException   java有没有办法完全隐藏Web应用程序代码?   Android appcompat v7 21库中的java FadingActionBar错误   Eclipse/com中的java AdMob。谷歌。安卓gms。ads.AdView   java My Service表示它正在运行,但其状态尚不清楚,似乎没有绑定   java无法启动Apache Tomcat Web应用程序容器   JDK:java中的命名约定。可丢弃的   Spring SerSecurity中的java身份验证错误   Maven:使用JDK8编译Java7   java在使用ExecutorService时如何管理内存?   comm.jar通信串行端口java   java LibGDX创建动画