35

datetime日曜日から土曜日までの前週の開始日と終了日を取得するために活用しようとしています。

したがって、今日が 8/12/13 の場合、次のように出力する関数を定義したいと思います。

Last Sunday was 8/4/2013 and last Saturday was 8/10/2013

これを書くにはどうすればいいですか?

編集:わかりました。エッジケースについていくつか質問があるようです。today土曜日の場合は同じ週が必要で、それ以外の場合はの日付の直前の暦週が必要です。

4

8 に答える 8

50

datetime.date.weekday0は月曜日を返します。それを調整する必要があります。

以下を試してください:

>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2013, 8, 13)
>>> idx = (today.weekday() + 1) % 7 # MON = 0, SUN = 6 -> SUN = 0 .. SAT = 6
>>> idx
2
>>> sun = today - datetime.timedelta(7+idx)
>>> sat = today - datetime.timedelta(7+idx-6)
>>> 'Last Sunday was {:%m/%d/%Y} and last Saturday was {:%m/%d/%Y}'.format(sun, sat)
'Last Sunday was 08/04/2013 and last Saturday was 08/10/2013'

python-dateutil の使用が許可されている場合:

>>> import datetime
>>> from dateutil import relativedelta
>>> today = datetime.datetime.now()
>>> start = today - datetime.timedelta((today.weekday() + 1) % 7)
>>> sat = start + relativedelta.relativedelta(weekday=relativedelta.SA(-1))
>>> sun = sat + relativedelta.relativedelta(weekday=relativedelta.SU(-1))
>>> 'Last Sunday was {:%m/%d/%Y} and last Saturday was {:%m/%d/%Y}'.format(sun, sat)
'Last Sunday was 08/04/2013 and last Saturday was 08/10/2013'
于 2013-08-13T04:26:46.193 に答える
12

ここから私の場合はうまくいく最良の答えを見つけました

これを試して

from datetime import datetime,timedelta
import time

def last_day(d, day_name):
    days_of_week = ['sunday','monday','tuesday','wednesday',
                        'thursday','friday','saturday']
    target_day = days_of_week.index(day_name.lower())
    delta_day = target_day - d.isoweekday()
    if delta_day >= 0: delta_day -= 7 # go back 7 days
    return d + timedelta(days=delta_day)
于 2013-11-07T11:47:55.023 に答える
5
>>> today = date.today().toordinal()
>>> lastWeek = today-7
>>> sunday = lastWeek - (lastWeek % 7)
>>> saturday = sunday + 6
>>> print "Last Sunday was %s and last Saturday was %s" % (date.fromordinal(sunday), date.fromordinal(saturday))
Last Sunday was 2013-08-04 and last Saturday was 2013-08-10
于 2013-08-13T04:27:17.973 に答える
2

次のコードは私のために働きます:

    today = datetime.date.today()
    last_sunday_offset = today.weekday() + 1  # convert day format mon-sun=0-6 => sun-sat=0-6 
    last_sunday = today - datetime.timedelta(days=last_sunday_offset)

注: 上記では通常の平日 (月曜日は 0) を使用していますが、isoweekday では月曜日は 1 になります。詳細については、 python 組み込みパッケージ datetime.pyのweekday() および isoweekday()メソッドを確認してください。

    def weekday(self):
        "Return day of the week, where Monday == 0 ... Sunday == 6."
        return (self.toordinal() + 6) % 7

    # Day-of-the-week and week-of-the-year, according to ISO

    def isoweekday(self):
        "Return day of the week, where Monday == 1 ... Sunday == 7."
        # 1-Jan-0001 is a Monday
        return self.toordinal() % 7 or 7```
于 2021-04-16T11:04:32.120 に答える