如何让rrule.between()只包含开始时间戳

时间:2016-07-05 21:25:33

标签: python python-dateutil

如何使用dateutil创建仅排除结束时间戳的套期?我是否必须创建一个自定义函数,或者有没有办法在本地执行此操作?

这是一个例子

rule = rrule.rrule(rule.HOURLY,tsstart=somedate,until=somedate_four_hours_later)

我希望输出为EXCLUDE somedate_four_hours_later并且只生成4个时间戳,一些日期,一些日期+ 1小时等等。

2 个答案:

答案 0 :(得分:3)

执行此操作的一种方法是使用rruleset,它允许您根据需要组合重复规则和特定日期。在这种情况下,您要做的是将until日期设置为exdate(排除日期):

from dateutil import rrule
from datetime import datetime, timedelta

dtstart = datetime(2015, 1, 3, 12)
dtuntil = datetime(2015, 1, 3, 16)

rr = rrule.rrule(freq=rrule.HOURLY, dtstart=dtstart, until=dtuntil)

# Add your rrule to the ruleset, then exclude the until date from the rule set
rrset = rrule.rruleset()
rrset.rrule(rr)

l1 = list(rrset)
rrset.exdate(dtuntil)

l2 = list(rrset)

print(l1[-1])   # 2015-01-03 16:00:00
print(l2[-1])   # 2015-01-03 15:00:00

rrule本身将包含until日期,但exdate会将其从rruleset中排除。

答案 1 :(得分:1)

您可以设置计数:

cookies(cookie, user_id)

或者使用 timedelta 在开始时增加三个小时:

In [1]: from dateutil import rrule

In [2]: from datetime import datetime, timedelta

In [3]: st = datetime(2016, 7, 5, 23, 30)

In [4]: rule = rrule.rrule(rrule.HOURLY, st, count=4)


In [5]: print(list(rule))
[datetime.datetime(2016, 7, 5, 23, 30), datetime.datetime(2016, 7, 6, 0, 30), datetime.datetime(2016, 7, 6, 1, 30), datetime.datetime(2016, 7, 6, 2, 30)]