确定下一个工作日



我正在尝试编写一个代码来确定下一个市场(每4天都会出现(。可以从一个市场日期开始打印市场天数。如果我在一天不是市场日运行代码,那么列表将不正确,因为它只会增加4天。但是我需要代码才能打印下一个市场。例如,最后一个市场日为17/29/5,下一个应该是2/6/17。
我需要创建一个包含日期列表的文件并比较?

 import datetime
 today = datetime.date.today()
 year = int(input('Enter a year: '))
 month = int(input('Enter a month: '))
 day = int(input('Enter a day: '))
 date2 = datetime.date(year, month, day)
 mday = datetime.timedelta(days=4)
 print('Market days till ',date2)
 while today <= date2:
    mtoday = (today.strftime('nNext Market day: %A, %B %d, %Y'))
    print (mtoday)
    today = today + mday

有两个简单的解决方案,但每个涉及更改输入参数的人(如果可以接受(。

第一个解决方案。将投入作为上一天。然后您的解决方案正常

第二个解决方案。与day_delta_since_last_market_day一起使用日期时间

您可以在添加4天之前将此三角洲添加到" dateTime"。

 import datetime
 today = datetime.date.today()
 date2 = datetime.date(2016, 5, 26) #a reference of a passed market day
 mday = datetime.timedelta(days=4)
 a=date2
 while a<today:
    a=a+mday
 print a

如果参考的市场是(2016,5,26(,那么今天的下一个市场将是:

>>> print a
2017-06-01

如果您只需要下一个市场日的天数和下一个市场日的日期,这应该可以解决:

from datetime import date, timedelta
first_market_day = date(year=2017, month=5, day=29)
market_day_period = timedelta(days=4)
def is_market_day(value):
    if value >= first_market_day:
        if (value-first_market_day).days % market_day_period.days == 0:
            return True
    return False
def next_market_day(value):
    if value >= first_market_day:
        days_past_last = timedelta(days=(value-first_market_day).days % market_day_period.days)
        return value + timedelta(days=4) - days_past_last
    else:
        return first_market_day

您需要一个参考市场日,无关紧要的是哪一个,您知道市场发生的一天,之后只是一个计算问题。

import datetime
today = datetime.date.today()
year = int(input('Enter a year: '))
month = int(input('Enter a month: '))
day = int(input('Enter a day: '))
last_market = str(input('Enter date of last known market(yyyymmdd): '))
lm = datetime.date(int(last_market[:4]),int(last_market[4:6]),int(last_market[6:]))
date2 = datetime.date(year, month, day)
mday = datetime.timedelta(days=4)
print('Market days till ',date2.strftime('%d-%m-%Y'))
while lm <= today:
    lm = lm + mday
today = lm
while today <= date2:
    mtoday = (today.strftime('nNext Market day: %A, %B %d, %Y'))
    print (mtoday)
    today = today + mday

最新更新