3

我正在使用“日期时间”,但无法弄清楚如何按星期几以“%Y-%M-%d”格式获取日期。例如:

由于今天是 2013 年 4 月 1 日(星期一),那么下一个星期二或星期四会获取什么代码?(输出应该是 2013-04-02 - 星期二)

或者如果日期是 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。(%w将返回 0 到 6 范围内的 int,其中 0 是星期日。)

这个想法应该很容易扩展到星期一/星期三/星期五。

于 2013-04-02T00:44:48.817 回答