首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用python生成重复日期?

使用python生成重复日期?
EN

Stack Overflow用户
提问于 2010-02-19 19:03:17
回答 2查看 5.7K关注 0票数 20

如何使用Python生成循环日期?例如,我想为“每隔一个月的第三个星期五”生成循环日期。我想生成每天、每周、每月、每年的定期日期(即,与Outlook Express中的定期功能相同)。

EN

回答 2

Stack Overflow用户

发布于 2010-02-19 19:10:23

你可以试一试dateutil --尤其是它的relativedelta和rrule fetures。

票数 0
EN

Stack Overflow用户

发布于 2010-02-19 21:36:24

你可以尝试自己写这篇文章。您首先需要一个迭代器,该迭代器生成由给定间隔分隔的日期:

代码语言:javascript
复制
import datetime

def dateiter(start, resolution):
    date = start
    while True:
            yield date
            date += resolution

现在,您可以生成日期并对其进行过滤:

代码语言:javascript
复制
# generate a list of every tuesday of february
# this iterates over every day from now, and filtered according to the rules
# warning: infinite generator below, there is nothing to end the iteration
tuesdays_of_february = (date for date in dateiter(datetime.datetime.now(), datetime.timedelta(days=1)) if date.weekday() == 4 and date.month == 2)

您可以自己调用迭代器,直到您有足够的日期:

代码语言:javascript
复制
>>> next(tuesdays_of_february)
datetime.datetime(2010, 2, 19, 14, 25, 46, 171000)

现在,您需要限制结果:

代码语言:javascript
复制
>>> from itertools import *
>>> 
>>> # get the five next valid dates:
>>> list(islice(tuesdays_of_february),5)
[datetime.datetime(2010, 2,26, 14, 25, 46, 171000), datetime.datetime(2011, 2, 4
, 14, 25, 46, 171000), datetime.datetime(2011, 2, 11, 14, 25, 46, 171000), datet
ime.datetime(2011, 2, 18, 1    4, 25, 46, 171000), datetime.datetime(2011, 2, 25
, 14, 25, 46, 171000)]
>>> 
>>> # or until a condition is met:
>>> list(takewhile( lambda date: date.year < 2014, tuesdays_of_february ))
[datetime.datetime(2012, 2, 3, 14, 25, 46, 171000), datetime.datetime(2012, 2, 1
0, 14, 25, 46, 171000), datetime.datetime(2012, 2, 17, 14, 25, 46, 171000), date
time.datetime(2012, 2, 24, 14, 25, 46, 171000), datetime.datetime(2013, 2, 1, 14
, 25, 46, 171000), datetime.datetime(2013, 2, 8, 14, 25, 46, 171000), datetime.d
atetime(2013, 2, 15, 14, 25, 46, 171000), datetime.datetime(2013, 2, 22, 14, 25,
 46, 171000)]

不要忘记查看datetime模块的文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2295765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档