首页 > 解决方案 > 在 kdb+ 上获取开始日期和结束日期并计算这些日期之间有多少个星期日落在每月 1 日的函数

问题描述

创建一个函数,该函数需要一个开始日期和结束日期,并计算这些日期之间有多少个星期日落在 kdb+ 上的每月 1 日,我该怎么做?

该函数需要显示自 1950 年以来这种情况发生了多少次

标签: kdb

解决方案


让我们定义一个函数,它首先返回其参数(类型date)的工作日。

日期的基础值是从 2000 年 1 月 1 日算起的天数,我们知道 2000 年 1 月 1 日是星期六。第二天显然是星期天,然后是星期一等,2000 年 1 月 1 日之后和之前的每 7 日、14 日、21 日等日也是星期六。因此,如果我们将日期取模 7,我们将得到一个工作日数,其中 0 是星期六,1 是星期日,依此类推。这导致我们得出以下定义。

weekday:{ `sat`sun`mon`tue`wed`thu`fri x mod 7 }

现在我们可以创建一个函数来回答原始问题:

sundaysThe1st:{[start;end]sum `sun=weekday dates where 1=`dd$dates:start+til 1+end-start }

start+til 1+end-start生成start和之间的日期列表enddates where 1=`dd$dates`sun=weekday dates返回月份的第一天,1b如果该月的第一天是星期日则返回,0b否则返回。sum实际上是 1 的数量,这正是我们所需要的。

希望这可以帮助。


推荐阅读