Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在KDB/Q中获得一年的第一天?_Kdb_Q Lang - Fatal编程技术网

如何在KDB/Q中获得一年的第一天?

如何在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

我正在寻找有效的函数来获得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.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页面