7

日を指定して、その日が存在する週のすべての日 (datetime インスタンス) を取得したいと考えています。

私には解決策があります。より効率的な方法が存在する場合、何か問題がある場合は修正してください。

>>> import datetime
>>> today = datetime.datetime(2013, 06, 26)
>>> today
datetime.datetime(2013, 6, 26, 0, 0)
>>> day_of_week = today.isocalendar()[2] - 1
>>> day_of_week
2
>>> start_date = today - timedelta(days=day_of_week)
>>> start_date
datetime.datetime(2013, 6, 24, 0, 0) # Got monday
>>> dates = [start + timedelta(days=i) for i in range(7)]
>>> dates
[datetime.datetime(2013, 6, 24, 0, 0),
 datetime.datetime(2013, 6, 25, 0, 0),
 datetime.datetime(2013, 6, 26, 0, 0),
 datetime.datetime(2013, 6, 27, 0, 0),
 datetime.datetime(2013, 6, 28, 0, 0),
 datetime.datetime(2013, 6, 29, 0, 0),
 datetime.datetime(2013, 6, 30, 0, 0)]

月曜日を開始日、日曜日を終了日にしたいです。

4

1 に答える 1

16

datetime.date()代わりに、ここで日付を計算していることを明確にするためにdate.weekday()使用し、呼び出しを使用する代わりに現在の平日を取得するために使用し.isocalendar()、0 ベースの平日番号 (0 は月曜日) を提供します。

import datetime

today = datetime.date(2013, 06, 26)
dates = [today + datetime.timedelta(days=i) for i in range(0 - today.weekday(), 7 - today.weekday())]

デモ:

>>> from pprint import pprint
>>> import datetime
>>> today = datetime.date(2013, 06, 26)
>>> pprint([today + datetime.timedelta(days=i) for i in range(0 - today.weekday(), 7 - today.weekday())])
[datetime.date(2013, 6, 24),
 datetime.date(2013, 6, 25),
 datetime.date(2013, 6, 26),
 datetime.date(2013, 6, 27),
 datetime.date(2013, 6, 28),
 datetime.date(2013, 6, 29),
 datetime.date(2013, 6, 30)]

python 2 では、必要に応じて置き換えることができrange()ますxrange()。7 日間の値であり、大きな違いはありません。

明確にするためだけに。datetime.weekday()も存在し、.isoweekday()あまりにもあるので、.isocalendar()どこでも使用する必要はありません。

于 2013-06-24T13:48:39.290 に答える