3

「datetime」を使用していますが、曜日ごとに「%Y-%M-%d」の形式で日付を取得する方法がわかりません。例えば:

今日は 2013 年 4 月 1 日 (月曜日) なので、次の火曜日または木曜日を取得するコードはどれですか? (出力は 2013-04-02 - Tuesday である必要があります)

または、日付が 2013 年 4 月 2 日 (火曜日) の場合、次の月、水、または金を取得するコードはどれでしょうか? (出力は 2013-04-03 - 翌日または水曜日)

ありがとう、

4

2 に答える 2

4

これは機能します:

import datetime as dt

dow={d:i for i,d in 
         enumerate('Mon,Tue,Wed,Thu,Fri,Sat,Sun'.split(','))}

def next_dow(d,day):
    while d.weekday()!=day:
        d+=dt.timedelta(1)

    return d   

d1=min(next_dow(dt.datetime(2013,4,1),day) 
                 for day in (dow['Tue'],dow['Thu']))   
d2=min(next_dow(dt.datetime(2013,4,2),day) 
                 for day in (dow['Mon'],dow['Wed'],dow['Fri'])) 

for d in d1,d2:
    print d.strftime('%Y-%m-%d') 

または(おそらくより良いですが、一般的ではありません):

def next_dow(d,days):
    while d.weekday() not in days:
        d+=dt.timedelta(1)

    return d   

d1=next_dow(dt.datetime(2013,4,1),(dow['Tue'],dow['Thu']))
d2=next_dow(dt.datetime(2013,4,2),(dow['Mon'],dow['Wed'],dow['Fri']))

for d in d1,d2:
    print d.strftime('%Y-%m-%d') 

版画:

2013-04-02 
2013-04-03 
于 2013-04-02T01:09:54.733 に答える
0

次のようなことを試すことができます:

from datetime import datetime
from datetime import timedelta

def return_next_tues_thur(dt):
    while True:
        dt += timedelta(days=1)
        dow = dt.strftime(%w)
        if dow == 2 || dow == 4:
           return dt

dt = datetime.now()  # Or you set it: dt = datetime(2013, 4, 1)
next_tues_thur = return_next_tues_thur(dt)
print next_tues_thur.strftime("%Y-%m-%d")

これはstrftimeメソッドと%w修飾子を使用して、オブジェクトから曜日を取得しdatetimeます。( %w0 から 6 の範囲の int を返します。0 は日曜日です。)

このアイデアは、月曜日/水曜日/金曜日に簡単に拡張できるはずです。

于 2013-04-02T00:44:48.817 に答える