2013-04-02 38 views
2

我使用“datetime”,并且无法确定如何在一周中的某天以格式“%Y-%M-%d”获取日期。例如:查找下一个日期的一周中的日期

由于今天是2013-04-01(星期一),因此代码会在接下来的周二或周四抓取哪些代码? (输出应该是2013年4月2日 - 星期二)

或者如果日期是2013年4月2日星期二,哪个代码会抓取下一个星期一,星期三或星期五? (输出应该是2013年4月3日 - 第二天或周三)

感谢,

+0

这是不相关的Python或它的日期和时间模块。你需要编写一个计算这个的算法。 – wRAR

+0

感谢您向我展示weekday()方法。这就是我需要的! –

回答

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 
+0

谢谢!这是一个很好的回应。有趣的使用weekday()函数。谢谢,了解了很多。 –

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的整数,其中0表示星期日。)

此构思应易于扩展到周一/周三/周五。

相关问题