0

我想使用 Python 的calendar模块(或其他更合适的模块)为给定年份的每个星期一和星期六生成 yyyy-mm-dd 格式的日期列表,但我不想引入图书馆外)。

但是,为您提供全年数据的函数,例如calendar.calendar()以字符串格式输出日历,不用说,使用起来会非常繁琐。

我想要的是类似的calendar.monthcalendar,它为每个列表返回一个包含 7 个条目的矩阵,每个条目代表一周中有序的一天。然而,这对我的周一和周六问题来说也是一个负担,因为有些周跨越 2 个月(即月末和月初)。

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

4

2 回答 2

6

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']
于 2013-01-12T19:41:15.830 回答
2

尽管它是一个外部依赖项,但 dateutil具有您通过它rrule 模块搜索的功能。

>>> 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)]
>>> 
于 2013-01-12T22:11:23.077 回答