如何查找日期范围内的星期五/星期四数

时间:2016-11-02 14:27:02

标签: python python-2.7

是否有任何python函数可以从日期范围推断出星期五或星期四的数量?我搜索谷歌,我发现许多方法,通常使用天数除以7概念,但它不会给你准确的日子。例如,从2016年11月1日到2016年11月12日,有两个星期五和两个星期四,因此减法的结果应为8。

3 个答案:

答案 0 :(得分:0)

使用date模块中的datetime对象。

from datetime import date, timedelta

curr = date(2016, 11, 1)
end = date(2016, 11, 12)
step = timedelta(1)
num_thur_fri = 0
while curr <= end:
    if curr.weekday() in [3,2]: #Friday and thursday
        num_thur_fri += 1
    curr += step
print(num_thur_fri)

更多阅读:https://docs.python.org/2/library/datetime.html#module-datetime

@brianpck是对的,这是一个非常天真的解决方案。这是一个更好的

from datetime import date

begin = date(2016, 11, 1)
end = date(2016, 11, 12)
diff = (begin-end).days
day_of_week = begin.weekday()
num_thur_fri = 2*(diff//7)
for i in range(diff%7):
    if day_of_week in [2,3]:
        num_thur_fri += 1
    day_of_week = (day_of_week +1) %7

答案 1 :(得分:0)

这是一种更简单,更快速的方法,可以长时间计算这个数字。

首先,您必须计算两个datetime之间的天数。然后你可以将7除以得到整个周的数量并乘以2来得到星期四和星期五的数量。最后一步是以7为模来获得尾部的天数,然后计算其中有多少是星期四或星期五:这最后一步是唯一一个实际需要知道它是哪个工作日的。

完整的功能是:

from datetime import datetime, timedelta

def thursday_fridays_between(date1, date2):
    days_between = abs((date2 - date1).days)
    thursday_friday = days_between // 7 * 2
    thursday_friday += sum((a + timedelta(i)).weekday() in (3, 2) for i in range(days_between % 7 + 1))
    return thursday_friday

可以按如下方式使用:

>>> a = datetime(2016, 11, 1)
>>> b = datetime(2016, 11, 12)
>>> thursday_fridays_between(a, b)
4

答案 2 :(得分:0)

我想出一个方法,如果我错了,请纠正我。

这是我的代码

$final[0].'#text'