以下代码获取日期参数的星期开始:
weekstart = datetime.datetime.strptime(sys.argv[1], '%m/%d/%Y')
if weekstart.strftime('%A') != 'Sunday':
print "Start date should be a Sunday"
while weekstart.strftime('%A') != 'Sunday':
#weekstart = weekstart - datetime.timedelta(a)
a=a+1
print "Using %s as start date instead" %weekstart.strftime('%m/%d/%Y')
仅当输入的日期是2012年7月10日,2012年7月7日,2012年12月7日或2012年7月13日时才会收到以下错误:
while weekstart.strftime('%A') != 'Sunday':
ValueError: year=1899 is before 1900; the datetime strftime() methods require year >= 1900
这有什么问题?
答案 0 :(得分:2)
是的,这是你的概念中的一个错误。您错误地将a
递增并按weekstart
递减a
。所以它不是日复一日,而是一天,两天,三天,四天......天。
7/10/2012
是星期二。减去1天...... 7/9/2012
是星期一。减去2天...... 7/7/2012
是星期六。减去3天...... 7/4/2012
是星期三。减去4天...... 6/30/2012
是星期六。减去5天...... 6/25/2012
是星期一。减去6天...... 6/19/2012
是星期二。减去7天,即一周,循环越来越快,直到1899年它破裂。这意味着,如果您的第一天是星期二,它将永远不会以这种方式到达星期日。
它适用于2012年7月11日(以及任何星期三),它打破了2012年12月7日(以及任何星期四),它打破了7/13/2012(和任何星期五),它适用于7 / 14/2012(以及任何星期六)它适用于2012年7月16日(以及任何星期一),当然它会在任何星期天立即停止。
但这不是你想要的。
如果你想在没有循环的任何一天获得前一天(或今天的)星期日,请使用:
weekstart = weekstart - datetime.timedelta((weekstart.weekday() - 6) % 7)
或者,如果你想避免数学和使用库(dateutil):
from dateutil import relativedelta
weekstart = weekstart + relativedelta.relativedelta(weekday=relativedelta.SU(-1))