0

Python のモジュールを使用して、特定の年の毎週月曜日と土曜日の yyyy-mm-dd 形式の日付のリストを生成したいcalendar(または、より適している場合は別のものを使用しますが、図書館の外)。

ただし、カレンダーを文字列形式で出力するだけのように、1 年全体のデータを取得する関数は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 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)]
>>> 
于 2013-01-12T22:11:23.077 に答える