【发布时间】:2017-01-11 23:17:07
【问题描述】:
获取准确的日期总是很棘手。我想知道封装 30 个工作日需要多少周。开始日可以是工作日中的任何一天。 周末不能算。
例如,如果我从 2017 年 1 月 11 日开始,那么在 30 周内(包括开始日期),结束日期是 2/21/2017 >。这意味着需要 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 周数,这是不正确的。
【问题讨论】:
-
想到的一种方法是使用
date.weekday()- docs.python.org/2/library/datetime.html#datetime.date.weekday。您可以计算此函数返回 0(星期一)到 4(星期五)的次数。 -
startdate = datetime.date(2017, int(month), int(day)) -
2017-1-11 到 2017-2-21 是 6 周,而不是 7 周
标签: python python-2.7 datetime