代码之家  ›  专栏  ›  技术社区  ›  sparklewhiskers

使用现有rrule生成另一组引用

  •  2
  • sparklewhiskers  · 技术社区  · 16 年前

    我有一个例子。

         r = rrule(WEEKLY, byweekday=SA, count=10, dtstart=parse('20081001'))
    

    dtstart和BYWORKDAY可能会更改的位置。

    r的dtustart成员?这似乎有效,但我不确定。

    例如

         r._dtstart = list(r)[-1] or something like that
    

    我已经考虑了很多,我认为我应该做的是在创建第一个rrule实例时省略'count'参数。第一次使用rrule时,我仍然可以获得10次引用

    instances = list(r[0:10]) 
    

    然后我可以得到更多

    more = list(r[10:20]) 
    

    我认为这解决了我的问题,没有任何丑陋之处

    1 回复  |  直到 11 年前
        1
  •  1
  •   mhawke    16 年前

    首先, r._dtstart = list(r)[-1]

    >>> from dateutil.rrule import *
    >>> import datetime
    
    >>> r = rrule(WEEKLY, byweekday=SA, count=10, dtstart=datetime.datetime(2008,10,01))
    >>> print list(r)
    [datetime.datetime(2008, 10, 4, 0, 0), datetime.datetime(2008, 10, 11, 0, 0), datetime.datetime(2008, 10, 18, 0, 0), datetime.datetime(2008, 10, 25, 0, 0), datetime.datetime(2008, 11, 1, 0, 0), datetime.datetime(2008, 11, 8, 0, 0), datetime.datetime(2008, 11, 15, 0, 0), datetime.datetime(2008, 11, 22, 0, 0), datetime.datetime(2008, 11, 29, 0, 0), datetime.datetime(2008, 12, 6, 0, 0)]
    >>> r._dtstart = r[-1]
    >>> print list(r)
    [datetime.datetime(2008, 12, 6, 0, 0), datetime.datetime(2008, 12, 13, 0, 0), datetime.datetime(2008, 12, 20, 0, 0), datetime.datetime(2008, 12, 27, 0, 0), datetime.datetime(2009, 1, 3, 0, 0), datetime.datetime(2009, 1, 10, 0, 0), datetime.datetime(2009, 1, 17, 0, 0), datetime.datetime(2009, 1, 24, 0, 0), datetime.datetime(2009, 1, 31, 0, 0), datetime.datetime(2009, 2, 7, 0, 0)]
    

    此外,操纵r.(DTU)启动被认为是一种糟糕的形式,因为它显然是一种私有属性。

    >>> r = rrule(WEEKLY, byweekday=SA, count=10, dtstart=datetime.datetime(2008,10,01))
    >>> r2 = rrule(WEEKLY, byweekday=SA, count=r.count(), dtstart=r[-1] + datetime.timedelta(days=1))
    >>> print list(r)
    [datetime.datetime(2008, 10, 4, 0, 0), datetime.datetime(2008, 10, 11, 0, 0), datetime.datetime(2008, 10, 18, 0, 0), datetime.datetime(2008, 10, 25, 0, 0), datetime.datetime(2008, 11, 1, 0, 0), datetime.datetime(2008, 11, 8, 0, 0), datetime.datetime(2008, 11, 15, 0, 0), datetime.datetime(2008, 11, 22, 0, 0), datetime.datetime(2008, 11, 29, 0, 0), datetime.datetime(2008, 12, 6, 0, 0)]
    >>> print list(r2)
    [datetime.datetime(2008, 12, 13, 0, 0), datetime.datetime(2008, 12, 20, 0, 0), datetime.datetime(2008, 12, 27, 0, 0), datetime.datetime(2009, 1, 3, 0, 0), datetime.datetime(2009, 1, 10, 0, 0), datetime.datetime(2009, 1, 17, 0, 0), datetime.datetime(2009, 1, 24, 0, 0), datetime.datetime(2009, 1, 31, 0, 0), datetime.datetime(2009, 2, 7, 0, 0), datetime.datetime(2009, 2, 14, 0, 0)]
    

    此代码不访问rrule的任何私有属性(尽管您可能需要查看 _byweekday ).