You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 08:29:56