准确的日期总是很棘手的。我想知道封装30周需要多少周。开始日可以是星期日的任何一天。周末不能计算在内。
例如,如果我从2017年11月1日开始,那么在30周内(包括开始日期),结束日期是2017年2月21日。这意味着需要7周的时间。你知道吗
这就是我尝试过的:
因为datetime.isocalendar()
可以用来确定一年中的周数,所以我的想法是按照以下思路:
datetime.isocalendar(enddate) - datetime.isocalendar(startdate)
。你知道吗
但我相信我的结束日期计算是错误的,所以我得到了奇怪的数字:
import datetime
def doit(month, day):
startdate = datetime.datetime.strptime("2017-%s-%s" % (month,day),"%Y-%m-%d")
enddate = startdate + datetime.timedelta(days=41)
print datetime.datetime.isocalendar(enddate)[1] - datetime.datetime.isocalendar(startdate)[1]
我知道days=41
因为每个星期有两个周末我们不算,所以30个工作日通常是6周,这意味着6*2+30=42天。但由于我们计算的是开始日期,所以我们只增加了42-1=41
天。你知道吗
为什么我的号码不正确?例如,如果您输入上面列出的日期(doit(1,11)
),我将得到6
周,这是不正确的。你知道吗
一种方法是只模拟每天步行,除了事先取消5(整周)的倍数
这将输出以下内容:
请注意,它输出的是预期日期的22日,也就是21日,因为我将开始日期排除在外。如果你想的话,很容易改变。你知道吗
然后你可以用这个日期来看看需要多少周
或者让
end_by_weekdays()
直接返回天数,以避免这种反复。你知道吗注意:我在代码中使用了python3。最后一个例子将在python2上进行整数除法,并只输出
6
如果工作日是星期一,这个陈述会给你正确的答案!考虑到这种情况,您应该有点不同的想法开始日可以是一周中的任何一天。
相关问题 更多 >
编程相关推荐