如何在 KDB Q 中解析日期时间?

How do I parse datetime in KDB Q?

我有详细的数据:

t                    o      h      l      c      v    
------------------------------------------------------
2016-01-04T09:00:00Z 105.45 105.45 103.6  103.6  17462
2016-01-04T09:03:00Z 103.7  103.99 103.7  103.99 893  
2016-01-04T09:06:00Z 103.7  103.7  103.7  103.7  335  

我读过的是:

f: `:/home/chris/sync/us_equities/AAPL.csv
show flip `t`o`h`l`c`v!("SFFFFI";",")0: f

我正在尝试找出如何将 ISO8601 时间戳解析为 KDB 可以理解的内容。我应该怎么做?

这是我第一次使用 q

您可以从右侧的每个值 (/:) 中删除最后一个字符 (-1_),然后将 ($) 解析为时间戳

f: `:/home/chris/sync/us_equities/AAPL.csv
tab:flip `t`o`h`l`c`v!("*FFFFI";",")0: f
update "P"$-1_/:t from tab

请注意,* 应该用于通用文本数据而不是 S

如果您使用的是 kdb v4.0 或更高版本,您可以直接将其解析为类型“P”:

q)("PFFFFI";1#",")0:f
t                             o      h      l     c      v
--------------------------------------------------------------
2016.01.04D09:00:00.000000000 105.45 105.45 103.6 103.6  17462
2016.01.04D09:03:00.000000000 103.7  103.99 103.7 103.99 893
2016.01.04D09:06:00.000000000 103.7  103.7  103.7 103.7  335

对于较低的 kdb 版本,您必须按照 rianoc 的建议进行操作。