在python中,如何获得给定月份的第X个工作日?

在python中,如何获得给定月份的第X个工作日?,python,datetime,Python,Datetime,如果我有一个月(2017年5月),我想得到该月的第10个工作日——有没有快速的方法?蛮力,我知道我可以循环通过每个日历日的时间,并创建一个大规模的映射。但是想知道是否有更简单的方法 对不起,如果以前有人问过这个问题!在python中似乎找不到解决方案。如果你想实现一个基本算法来解决它,有很多方法,但这篇维基百科文章中列出了一个非常简单的方法:你想实现一个基本算法来解决它,wikipedia文章中列出了很多方法,但有一个非常简单的方法:给定一个datetime.date对象您可以使用该方法检查一周

如果我有一个月(2017年5月),我想得到该月的第10个工作日——有没有快速的方法?蛮力,我知道我可以循环通过每个日历日的时间,并创建一个大规模的映射。但是想知道是否有更简单的方法


对不起,如果以前有人问过这个问题!在python中似乎找不到解决方案。

如果你想实现一个基本算法来解决它,有很多方法,但这篇维基百科文章中列出了一个非常简单的方法:

你想实现一个基本算法来解决它,wikipedia文章中列出了很多方法,但有一个非常简单的方法:

给定一个
datetime.date
对象您可以使用该方法检查一周中的哪一天,所有工作日返回值
给定一个
datetime.date
对象您可以使用该方法检查一周中的哪一天,所有工作日都返回值
对不起,什么是工作日?不清楚你想要什么,5月10日,或者你想要一周中的哪一天,例如星期一?啊,应该更清楚。所以,我不想要5月10日。但是我希望函数返回一个datetime,它是5月的第10天,不包括周末。对不起,什么是工作日?不清楚你想要什么,5月10日,或者你想要一周中的哪一天,例如星期一?啊,应该更清楚。所以,我不想要5月10日。但是我希望函数返回一个datetime,它是5月的第10天,不包括周末。你也可以这样做。但如果你不关心或不知道ISO标准的细节,我觉得它更具可读性<代码>>月内天数
!太棒了!哦,等等<代码>删除(…\u天\u月,…)
。。。。。dang it>:(它只有在C实现无法加载的情况下才可用。在Python3中似乎也只有datetime.py,但在日历中也可以。但是如果你不关心或不知道ISO标准的细节,我发现它更可读。
\u days\u in\u month
!太棒了!哦,等等…
del(…\u days\u in\u month…)
…dang it>:(仅当无法加载C实现时才可用。在Python3中似乎也只有datetime.py,但在日历中可用
def is_business_day(day):
    return day.isoweekday() < 5
In [29]: filter(lambda x: x[0] if x[1] else None, 
                [(d, is_business_day(datetime.date(2017,5,d))) 
                 for d in range(1,31)])
Out[29]: 
[(1, True),
 (2, True),
 (3, True),
 (4, True),
 (8, True),
 (9, True),
 (10, True),
 (11, True),
 (15, True),
 (16, True),
 (17, True),
 (18, True),
 (22, True),
 (23, True),
 (24, True),
 (25, True),
 (29, True),
 (30, True)]
In [34]: filter(lambda x: x[1] if x[1] else None, 
                [(d, is_business_day(datetime.date(2017,2,d))) 
                  for d in range(1,31)])
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-34-486d782346bd> in <module>()
----> 1 filter(lambda x: x[1] if x[1] else None, [(d, is_business_day(datetime.date(2017,2,d))) for d in range(1,31)])

ValueError: day is out of range for month
In [43]: [d for d in range(1,31) if is_business_day(datetime.date(2017,5,d))]
Out[43]: [1, 2, 3, 4, 8, 9, 10, 11, 15, 16, 17, 18, 22, 23, 24, 25, 29, 30]
In [6]: [d for d in range(1,31) if 
         is_business_day(datetime.date(2017,5,d))][9-1]
Out[6]: 15

In [7]: x=9

In [8]: [d for d in range(1,31) if 
         is_business_day(datetime.date(2017,5,d))][x-1]
Out[8]: 15