2016-08-03 93 views
1

我试图做一个脚本,将运行每隔一个周末,我已经尝试使用datetime(我在互联网上找到的解决方案,同样),但它总是打印整个星期。返回True每隔一个周末,返回False任何其他日子

from datetime import date, timedelta 
reference_monday = date(2016, 1, 8)  # any monday of a "week one" 

schedule = [[True, True, True, True, True, True, True], 
      [True, True, True, True, True, False, False]] 

def check_date(d): 
    return schedule[abs(d - reference_monday).days/7 % 2][d.weekday()] 

start = date(2012, 6, 4) 

for w in range(6): 
    thisweek = start + timedelta(weeks=w) 
    print 'week of', thisweek, ':', 
    print ','.join(str(check_date(thisweek + timedelta(days=d))) for d in range(7)) 

返回

week of 2012-06-04 : True,True,True,True,True,True,True 
week of 2012-06-11 : True,True,True,True,True,False,False 
week of 2012-06-18 : True,True,True,True,True,True,True 
week of 2012-06-25 : True,True,True,True,True,False,False 
week of 2012-07-02 : True,True,True,True,True,True,True 
week of 2012-07-09 : True,True,True,True,True,False,False 

我想它返回true或false,这取决于当前的一天。

+1

值得使用'cron','Task Scheduler'或类似的工具。已经为你安排了很多东西。 “ – AlG

+1

”,但它总是打印整个星期。“嗯,这就是我期望的...... ..这周+时间(天= d)))在范围内(7)'做。函数本身每次都会返回一个布尔值,您每周只需调用它7次。 –

回答

0

正如评论所述,有更好的替代方案来调度任务。

这是你想要的吗?

def check_date(d): 
    return not schedule[abs(d - reference_monday).days/7 % 2][d.weekday()] 

输出

week of 2012-06-04 : False,False,False,False,False,False,False 
week of 2012-06-11 : False,False,False,False,False,True,True 
week of 2012-06-18 : False,False,False,False,False,False,False 
week of 2012-06-25 : False,False,False,False,False,True,True 
week of 2012-07-02 : False,False,False,False,False,False,False 
week of 2012-07-09 : False,False,False,False,False,True,True 

我想它返回true或false,这取决于当天

start = date(2012, 6, 4) 
for w in range(6): 
    thisweek = start + timedelta(weeks=w) 
    print 'week of', thisweek, ':', 

    # Only Saturday and Sunday 
    run_sat = check_date(thisweek + timedelta(days=5)) 
    run_sun = check_date(thisweek + timedelta(days=6)) 

    print "{:5} | {:5}".format(str(run_sat), str(run_sun)) 

输出

week of 2012-06-04 : False | False 
week of 2012-06-11 : True | True 
week of 2012-06-18 : False | False 
week of 2012-06-25 : True | True 
week of 2012-07-02 : False | False 
week of 2012-07-09 : True | True