如何在KDB/Q中获得一年的第一天?
我正在寻找有效的函数来获得Q中的第一天。如2017.05.10->2017.01.01或2016.08.19->2016.01.01 下一个代码段可以工作,但效率不高如何在KDB/Q中获得一年的第一天?,kdb,q-lang,Kdb,Q Lang,我正在寻找有效的函数来获得Q中的第一天。如2017.05.10->2017.01.01或2016.08.19->2016.01.01 下一个代码段可以工作,但效率不高 {"D"$(string `year$x),".01.01"} .z.d 对于d的某些范围: q)"d"$ceiling 365.245*-2000+`year$.z.Z 2017.01.01 日期是从y2k开始的几天,对于某些d范围: q)"d"$ceiling 365.245*-2000+`year$.z.Z 2017.0
{"D"$(string `year$x),".01.01"} .z.d
对于d的某些范围:
q)"d"$ceiling 365.245*-2000+`year$.z.Z
2017.01.01
日期是从y2k开始的几天,对于某些d范围:
q)"d"$ceiling 365.245*-2000+`year$.z.Z
2017.01.01
日期是从y2k算起的几天这类计算中的一个常见技巧是,与日期不同,月份是非常有规律的:每年正好有12个月。因此,为了找到一年中的第一天,我们首先将日期转换为月份类型,然后将其四舍五入为12的倍数,再转换回日期类型:
q)f:"d"$12 xbar"m"$
q)f .z.d
2017.01.01
或与OP的日期:
q)f 2017.05.10 2016.08.19
2017.01.01 2016.01.01
这类计算中的一个常见技巧是使用一个事实,即与日期不同,月份是非常有规律的:每年正好有12个月。因此,为了找到一年中的第一天,我们首先将日期转换为月份类型,然后将其四舍五入为12的倍数,再转换回日期类型:
q)f:"d"$12 xbar"m"$
q)f .z.d
2017.01.01
或与OP的日期:
q)f 2017.05.10 2016.08.19
2017.01.01 2016.01.01
只是想在组合中加入另一个变体:
q){.Q.addmonths[x;1-`mm$x]+1-`dd$x} .z.d
2017.01.01
只是想在组合中加入另一个变体:
q){.Q.addmonths[x;1-`mm$x]+1-`dd$x} .z.d
2017.01.01
另一个解决方案是:
{"d"$1+(-).`month`mm$x}.z.d
2017.01.01
另一个解决方案是:
{"d"$1+(-).`month`mm$x}.z.d
2017.01.01
我认为这个例子可能适用于大多数给定的日期,但如果我输入2290年的任何日期,它会给出一年中的第二个日期。如果您关心这些日期,请将365.245更改为365.2425。或者看看我的答案。我认为这个例子可能适用于大多数给定的日期,但如果我输入2290年的任何日期,它会给我一年中的第二个日期。如果您关心这些日期,请将365.245更改为365.2425。或查看我的答案。完整性请参见上的wiki页面完整性请参见上的wiki页面