我正在尝试编写一个代码来确定下一个市场(每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