KDB字符串到kdb`timestamp`

问题描述

kdb凡人/神!

我有一个日期时间字符串数组,但格式不同

> leads[`firstConversion]
"Wed May 20 2020 08:56:54 GMT-0700 (PDT)"
"Wed May 20 2020 08:56:56 GMT-0700 (PDT)"
"Wed May 20 2020 08:56:56 GMT-0700 (PDT)"
"Wed May 20 2020 08:56:56 GMT-0700 (PDT)"
"Wed May 20 2020 08:56:57 GMT-0700 (PDT)"
"Wed May 20 2020 08:56:58 GMT-0700 (PDT)"
"Wed May 20 2020 08:56:58 GMT-0700 (PDT)"
"Wed May 20 2020 08:56:59 GMT-0700 (PDT)"
"Wed May 20 2020 08:57:00 GMT-0700 (PDT)"
"Wed May 20 2020 08:57:01 GMT-0700 (PDT)"
"Wed May 20 2020 09:06:32 GMT-0700 (PDT)"
"Wed May 20 2020 09:06:32 GMT-0700 (PDT)"
"Wed May 20 2020 09:06:33 GMT-0700 (PDT)"
"Wed May 20 2020 09:06:33 GMT-0700 (PDT)"
"Wed May 20 2020 09:06:35 GMT-0700 (PDT)"
"Wed May 20 2020 09:06:35 GMT-0700 (PDT)"
"Wed May 20 2020 09:07:07 GMT-0700 (PDT)"
"Wed May 20 2020 09:07:09 GMT-0700 (PDT)"
"Wed May 20 2020 09:07:09 GMT-0700 (PDT)"
"Wed May 20 2020 09:07:10 GMT-0700 (PDT)"

将它们转换为本地kdb时间戳2020.05.20D09:07:10.0000的最佳方法是什么?

解决方法

取决于每个字符串相关部分的索引的可预测性/一致性,如下所示。

q)x!"P"$4_'x
"Wed May 20 2020 08:56:54 GMT-0700 (PDT)"| 2020.05.20D08:56:54.000000000
"Wed May 20 2020 08:56:56 GMT-0700 (PDT)"| 2020.05.20D08:56:56.000000000
"Wed May 20 2020 08:56:56 GMT-0700 (PDT)"| 2020.05.20D08:56:56.000000000
"Wed May 20 2020 08:56:56 GMT-0700 (PDT)"| 2020.05.20D08:56:56.000000000
"Wed May 20 2020 08:56:57 GMT-0700 (PDT)"| 2020.05.20D08:56:57.000000000
q)
q)// or
q)
q)i:4+til -4+count first x
q)x!"P"$x[;i]
"Wed May 20 2020 08:56:54 GMT-0700 (PDT)"| 2020.05.20D08:56:54.000000000
"Wed May 20 2020 08:56:56 GMT-0700 (PDT)"| 2020.05.20D08:56:56.000000000
"Wed May 20 2020 08:56:56 GMT-0700 (PDT)"| 2020.05.20D08:56:56.000000000
"Wed May 20 2020 08:56:56 GMT-0700 (PDT)"| 2020.05.20D08:56:56.000000000
"Wed May 20 2020 08:56:57 GMT-0700 (PDT)"| 2020.05.20D08:56:57.000000000
q)
q)x:2000000#x
q)
q)\ts "P"$4_'x
495 161554832
q)\ts "P"$x[;i]
538 161554768
,

您可以使用.qdate库https://code.kx.com/developer/libraries/date-parser/

它可以解析为UTC或离开原始时区:

q).qdate.resolve["%a %b %d %Y %T    %z"] "Wed May 20 2020 09:07:10 GMT-0700 (PDT)"
2020.05.20D16:07:10.000000000
q).qdate.resolve["%a %b %d %Y %T"] "Wed May 20 2020 09:07:10 GMT-0700 (PDT)"
2020.05.20D09:07:10.000000000
,

这是一种方法:

q)t:("Wed May 20 2020 09:07:09 GMT-0700 (PDT)";"Wed May 20 2020 09:07:10 GMT-0700 (PDT)");
q)update stamp:"P"$" "0:(date;month;year;time) from flip `month`date`year`time!(" SIIT";" ")0:t
month date year time         stamp
----------------------------------------------------------
May   20   2020 09:07:09.000 2020.05.20D09:07:09.000000000
May   20   2020 09:07:10.000 2020.05.20D09:07:10.000000000

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...