如何解决获取前天营业日
基本上我正在寻找某种方法来计算前天的业务,因为我必须运行 t-2 查询,而不会对日期时间变量进行任何手动干预:
简而言之:
27.05.21 -> 25.05.21
今天的日期是一个动态变量,当然每天都在变化,您应该考虑周末,例如31.05.21 -> 27.05.21
我一直在努力修改“获取最后一个工作日的方法”以对其进行修改...
today = datetime.today()
offset = max(1,(today. weekday() + 6) % 7 - 3)
timedelta = datetime. timedelta(offset)
most_recent = today - timedelta
print(most_recent)
...但我失败得很惨,这里不值得一提。
任何帮助将不胜感激!
非常感谢!
巧 R
解决方法
您可以使用 pandas.tseries.offsets.BusinessDay
(仅周六和周日除外)。
from datetime import datetime
import pandas as pd
dates = ['24.05.21','25.05.21','26.05.21']
def offset(date,offset,date_format='%d.%m.%y'):
return (datetime.strptime(date,date_format) + pd.tseries.offsets.BusinessDay(offset)).strftime(date_format)
for date in dates:
print('if today =',date,'the expected result is',offset(date,-2))
输出:
if today = 24.05.21 the expected result is 20.05.21
if today = 25.05.21 the expected result is 21.05.21
if today = 26.05.21 the expected result is 24.05.21
这是一个没有熊猫的版本:
from datetime import datetime,timedelta
dates = ['24.05.21',date_format='%d.%m.%y'):
# adds offset
output = datetime.strptime(date,date_format) + timedelta(days=offset)
# adds more offset if output's weekday is Saturday or Sunday
output += timedelta(days=(output.isoweekday() > 5) * offset)
# returns output
return output.strftime(date_format)
for date in dates:
print('if today =',-2))
,
我认为我们可以通过预定义我们需要为目标日移动多少天来简化代码。例如,如果目标日是星期一或星期二,我们将移动 4 天,否则,我们将星期三移动 2 天到星期六,星期天移动 3 天。
代码:
import datetime
SHIFT_DAY_MAP = {
0: 4,1: 4,2: 2,3: 2,4: 2,5: 2,# Sat.
6: 3 # Sun.
}
def get_two_business_day_before(date: datetime.datetime):
weekday = date.weekday()
shift_days = SHIFT_DAY_MAP[weekday]
timedelta = datetime.timedelta(days=shift_days)
return date - timedelta
测试:
for i in range(7):
d = datetime.datetime(2021,5,10 + i)
print(d.date(),"->",get_two_business_day_before(d).date())
结果:
2021-05-10 -> 2021-05-06
2021-05-11 -> 2021-05-07
2021-05-12 -> 2021-05-10
2021-05-13 -> 2021-05-11
2021-05-14 -> 2021-05-12
2021-05-15 -> 2021-05-13
2021-05-16 -> 2021-05-13
注意:我假设周末的理想轮班天数是周六 2 天和周日 3 天,因为您的要求没有提到它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。