我正在使用" datetime"并且我很难弄清楚如何以格式"%Y-%M-%d"到星期几。例如:
由于今天是2013-04-01(周一),下周二或周四将采用什么代码? (输出应该是2013-04-02 - 星期二)
或者如果日期是2013-04-02,也就是星期二,那么下一个周一,周三或周五会有什么代码? (输出应为2013-04-03 - 次日或周三)
谢谢,
答案 0 :(得分:3)
这有效:
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
答案 1 :(得分: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,其中零是星期日。)
这个想法应该可以轻松扩展到星期一/星期三/星期五。