使用 Python 查找每年每个月的最后一个工作日
工作日也称为公司部门的工作日,在某些部门,工作日是周一至周五,在某些部门,工作日是周一至周六。在本文中,我们将了解如何使用 Python 查找每年每个月的最后一个工作日。Python 提供了各种库,如 datetime、time、calendar 等来处理时间操作。我们将利用这些库来编写相同的程序。此外,一些库(如 Pandas)也具有内置方法来支持此类时间操作。
使用 Datetime 和 Calender 模块
“datetime”和“calendar”是用于处理时间的标准 Python 模块。它提供了几个处理时间数据的实用程序函数。工作日的定义可能因多种因素而异。通常,周一至周五被认为是工作日。
示例
在下面的示例中,我们使用了“monthrange”方法来确定给定月份的天数。“datetime.date”方法另一方面创建了一个日期对象来处理时间操作。接下来,我们使用了一个 while 循环来将“date”每天递减一次,直到我们遇到任何工作日(从周一到周五)。最后,我们返回了“date”对象。
import datetime import calendar def last_business_day(year, month): last_day = calendar.monthrange(year, month)[1] date = datetime.date(year, month, last_day) while date.weekday() > 4: date -= datetime.timedelta(days=1) return date year = 2023 month = 9 last_bd = last_business_day(year, month) print("The last business day of {} {} is {}.".format( calendar.month_name[month], year, last_bd))
输出
The last business day of September 2023 is 2023-09-29.
使用 Dateutils 库
Python 的“dateutil”库提供了超出 Python 的“datetime”库的功能。它包含“rrule”模块,该模块允许我们处理循环日期。这在数据操作、生成日期序列等方面具有广泛的应用。另一方面,“relativedelta”类允许我们对日期时间执行加法、减法等操作。
示例
在下面的示例中,我们使用了 datetime、dateutils 和 calendar 模块。我们使用了“dateutil”模块的“rrule”方法来生成一个循环规则,该规则要求按月生成。我们使用“byweekly”参数指定将周一至周五视为工作日。我们将“count=1”保留为仅获取一个日期元素。
import datetime from dateutil import rrule, relativedelta import calendar def last_business_day(year, month): rule = rrule.rrule( rrule.MONTHLY, bymonth=month, bysetpos=-1, byweekday=(rrule.MO, rrule.TU, rrule.WE, rrule.TH, rrule.FR), dtstart=datetime.datetime(year, month, 1), count=1 ) return rule[0].date() year = 2023 month = 4 last_bd = last_business_day(year, month) print("The last business day of {} {} is {}.".format( calendar.month_name[month], year, last_bd))
输出
The last business day of April 2023 is 2023-04-28.
Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.
使用 Pandas 库
Pandas 是一个流行的 Python 开源库,旨在处理数据操作和分析。它处理由行和列组成的 DataFrame。在 pandas 中,我们有几个内置方法。其中一些方法是“Timestamp”、“Monthend”、“Dateoff”等。我们可以利用这些方法来处理日期和时间操作。
示例
在下面的示例中,我们首先导入了 calendar 和 pandas 库。我们使用“Timestamp”方法创建一个日期时间对象,并使用“Monthend”方法获取该月的最后一天。接下来,我们检查日期是否属于工作日类别。如果不是,我们继续将日期每天递减一次,直到找到一个属于工作日的日期。
import calendar import pandas as pd def last_business_day(year, month): date = pd.Timestamp(year, month, 1) + pd.offsets.MonthEnd(0) while date.weekday() > 4: date -= pd.DateOffset(days=1) return date.date() year = 2023 month = 12 last_bd = last_business_day(year, month) print("The last business day of {} {} is {}.".format( calendar.month_name[month], year, last_bd))
输出
The last business day of December 2023 is 2023-12-29.
结论
在本文中,我们了解了如何使用 Python 查找每年每个月的最后一个工作日。我们利用了 datetime、calendar 库来执行此操作。我们使用了几个实用程序函数,如 Timestamp、rrule 等。我们还看到了使用另一个名为 Pandas 的流行库来处理同一任务。