日历模块中全年的矩阵

时间:2013-01-12 19:28:54

标签: python calendar

我想使用Python的calendar模块(或者其他更合适的东西,但是我会在某个特定年份的每个星期一和星期六)生成yyyy-mm-dd格式的日期列表我不想带一个外面的图书馆。)

但是,像calendar.calendar()一样为全年提供数据的函数只输出字符串格式的日历,不用说,这将是不合理的繁琐工作。

我想要的是calendar.monthcalendar,它返回一个矩阵,每个列表有7个条目,每个矩阵代表一周中有序的一天。然而,这对我周一和周六的问题来说也很麻烦,因为有些周会持续2个月(即月末和月初)。

我想我可以制定一个尴尬的黑客来解决这个问题,但我希望有一个更好的方式我可以忽略。

2 个答案:

答案 0 :(得分:5)

IIUC,您只需使用datetime

>>> year = 2013
>>> days = [datetime.datetime(year, 1, 1) + datetime.timedelta(days=i) for i in range(366)]
>>> days = [day for day in days if day.year == year and day.weekday() in (0, 5)]
>>> formatted = [day.strftime("%Y-%m-%d") for day in days]
>>> len(formatted)
104
>>> formatted[:10]
['2013-01-05', '2013-01-07', '2013-01-12', '2013-01-14', '2013-01-19', '2013-01-21', '2013-01-26', '2013-01-28', '2013-02-02', '2013-02-04']

答案 1 :(得分:2)

虽然它是外部依赖项,但dateutil具有您通过它rrule module搜索的功能。

>>> import datetime
>>> import dateutil.rrule as rr
>>> year = 2013
>>> mondays_saturdays = rr.rrule(rr.DAILY,
...                              dtstart=datetime.datetime(year, 1, 1),
...                              until=datetime.datetime(year, 12, 31),
...                              byweekday=(rr.MO, rr.SA)
... )
>>> print len(list(mondays_saturdays))
104
>>> print list(mondays_saturdays)[:5]
[datetime.datetime(2013, 1, 5, 0, 0), datetime.datetime(2013, 1, 7, 0, 0), datetime.datetime(2013, 1, 12, 0, 0), datetime.datetime(2013, 1, 14, 0, 0), datetime.datetime(2013, 1, 19, 0, 0)]
>>>