如何从 Q 日期类型生成 ISO 日期字符串“yyyy-MM-dd”?我查看了连接各个部分,但甚至无法获得日期/月份,例如d:2015.12.01;d.month
prints 2015.12
,即不仅仅是月份。
问问题
5072 次
6 回答
4
如果您打算大规模执行此操作(即大型向量/日期列表或表格中的列)并且您确定您的日期总是格式正确,那么您可以使用点修改:
q)update .[;(::;4 7);:;"-"]string date from ([] date:2#.z.D)
date
------------
"2016-01-04"
"2016-01-04"
这样您就不必应用到向量/列表的“每个”条目,它适用于向量/列表本身。
于 2016-01-04T21:34:22.937 回答
3
q)"-" sv "." vs string[2015.12.01]
"2015-12-01"
vs
来自字符串的向量,用“.”分割 以上;
sv
字符串转向量,通过上面的“-”连接。
请记住,字符串只是一个 char 数组,因此您可以根据需要通过索引获取每个部分。但是上面的内容很有用,因为结果向量vs
给出了一个 3 长度的向量,你可以以任何你喜欢的方式操作
于 2016-01-04T19:36:31.870 回答
1
查看此GitHub 库以了解日期时间格式。它支持格式化日期和时间的excel方式。它可能不适合格式化大量对象。
q).dtf.format["yyyy-mm-dd"; 2018.06.08T01:02:03.456]
"2018-06-08"
时间格式:
q).dtf.format["yyyy-mmmm-dd hh:uu AM/PM"; 2018.01.08T01:02:03.456]
"2018-January-08 01:02 AM"
于 2018-08-22T18:20:02.500 回答
1
我相信 ISO8601 UTC 时间戳的最短(和最干净)选项,因为至少 kdb v3.4 将使用.h.iso8601
内置
IE
q).h.iso8601 .z.p
"2020-11-09T15:42:19.292301000"
或者,如果您只需要类似于 JS toISOString() 所做的毫秒,请使用:
q).isotime:{(23#.h.iso8601 x),"Z"}
q).isotime[.z.p]
"2020-11-09T16:02:02.601Z"
q).isotime[2015.12.01]
"2015-12-01T00:00:00.000Z"
注意.z.p
很重要,因为它.h.iso8601 .z.P
会默默地为您提供没有时区(+0100
等)的本地时间,因此兼容的 ISO8601 解析器仍会将其解释为 UTC :(
于 2020-11-09T15:51:25.443 回答
0
我正在使用这样的东西:
q)ymd:{[x;s](4#d),s,(2#-5#d),s,-2#d:string[x]}
q)ymd[.z.D;"-"]
"2016-01-25"
q)ymd[.z.D;"/"]
"2016/01/25"
q)ymd[.z.D;""]
"20160125"
或者对于表格:
q)t:([]a:5#1;5#.z.d)
q)update s:ymd[;"-"] each d from t
a d s
-------------------------
1 2016.01.26 "2016-01-26"
1 2016.01.26 "2016-01-26"
1 2016.01.26 "2016-01-26"
1 2016.01.26 "2016-01-26"
1 2016.01.26 "2016-01-26"
于 2016-01-26T02:07:19.283 回答
0
请更改分隔符,如更新语句中的-
或/
。
update s:{ssr[string x;".";y]}'[d;"-"] from ([]a:5#1;5?.z.d)
a d s
-------------------------
1 2010.12.31 "2010-12-31"
1 2012.08.24 "2012-08-24"
1 2004.12.05 "2004-12-05"
1 2000.10.02 "2000-10-02"
1 2006.09.10 "2006-09-10"
于 2017-07-07T19:43:03.010 回答