Python 中的前一个工作日

问题描述 投票:0回答:4

在Python中,给定一个日期,如何找到前一个工作日? (平日是周一到周五。我不在乎假期)

python date weekday
4个回答
54
投票

只需从给定日期中减去一天,然后检查该日期是否是工作日。如果没有,再减去一个,直到有工作日:

from datetime import date, timedelta
def prev_weekday(adate):
    adate -= timedelta(days=1)
    while adate.weekday() > 4: # Mon-Fri are 0-4
        adate -= timedelta(days=1)
    return adate

演示:

>>> prev_weekday(date.today())
datetime.date(2012, 8, 20)
>>> prev_weekday(date(2012, 8, 20))
datetime.date(2012, 8, 17)

或者,使用偏移表;无需将其设为映射,元组就可以了:

_offsets = (3, 1, 1, 1, 1, 1, 2)
def prev_weekday(adate):
    return adate - timedelta(days=_offsets[adate.weekday()])

2
投票

这是一个老问题,但无论如何,这是一种更简单的方法,不需要循环

from datetime import datetime, timedelta
today = datetime.strptime('2023-10-14',  '%Y-%m-%d')
today = today.replace(hour=0, minute=0, second=0, microsecond=0)
weekday = 6
days = today.isoweekday() - weekday
if days<=0:
    days += 7
previous_date = today - timedelta(days=days)
print(previous_date) # 2023-10-07 00:00:00 (Saturday = day 6 of the week )

1
投票

请参阅 datetime 模块,特别是

date()
weekday()
函数。例如:

import datetime

temp = datetime.date(2012,8,21) # Today's date: 2012/08/21
print temp.weekday()

这将输出

1
0
代表星期一,
1
代表星期二,依此类推,直到
6
代表星期日。从这里可以轻松查找前一个工作日。


1
投票

在日期时间模块中,您可以执行以下操作:

a = date.today() - timedelta(days=1)
然后
a.weekday()
。其中星期一是 0,星期日是 6。

© www.soinside.com 2019 - 2024. All rights reserved.