我想使用Python的calendar
模块(或者其他更合适的东西,但是我会在某个特定年份的每个星期一和星期六)生成yyyy-mm-dd格式的日期列表我不想带一个外面的图书馆。)
但是,像calendar.calendar()
一样为全年提供数据的函数只输出字符串格式的日历,不用说,这将是不合理的繁琐工作。
我想要的是calendar.monthcalendar
,它返回一个矩阵,每个列表有7个条目,每个矩阵代表一周中有序的一天。然而,这对我周一和周六的问题来说也很麻烦,因为有些周会持续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)]
>>>