kdb q中获取上一个工作日的最优方法及内置函数咨询
获取上一个工作日的实现方式
KDB/Q没有内置函数直接返回排除周末及节假日的上一个工作日,需要自定义逻辑实现,分两种场景处理:
仅排除周末的情况
可以通过判断日期对应的星期几,循环往前推直到得到工作日:
// 定义函数,接收基准日期x,返回x的上一个工作日 prevWeekday: { d: x - 1; // .z.w[d]返回日期d的星期几(0=周日,6=周六) while[.z.w[d] in 0 6; d: d - 1]; d } // 调用示例:获取当前日期的上一个工作日 prevWeekday[.z.d]
同时排除周末和节假日的情况
需要先维护一个自定义的节假日列表,再在上述逻辑基础上增加节假日判断:
// 自定义节假日列表(根据实际需求更新) holidays: 2024.01.01 2024.02.10 2024.04.04 2024.05.01 2024.06.10 2024.09.15 2024.10.01; prevWorkday: { d: x - 1; // 先排除周末 while[.z.w[d] in 0 6; d: d - 1]; // 再排除节假日,若遇到节假日则继续往前找 while[d in holidays; d: prevWeekday[d]]; d } // 调用示例:获取当前日期的上一个工作日(排除周末和节假日) prevWorkday[.z.d]
补充说明
.z.w是KDB/Q内置的星期几查询函数,传入日期可返回对应的星期索引(0=周日,1-5=周一至周五,6=周六)- 节假日列表需要根据业务所在地区、年份手动维护,因为不同地区的节假日规则差异较大,无法内置通用列表
内容的提问来源于stack exchange,提问作者mmv456
相关产品推荐
相关产品推荐

