KDB:将毫秒epoc转换为日期

时间:2018-11-23 20:37:46

标签: kdb

我有一个带有字符串列tDate的表t。

select tDate from t

tDate
----------
1542776400000
1542776400000
1542776400000
1542776400000
1542776400000
1542776400000
1540958400000
1542776400000
1542776400000
1542776400000
1542776400000

我想将其转换为MM / dd / YYYY格式的字符串。

但是我需要删除最后3个字符,然后将其转换为日期。但是以某种方式,以下语句无法正常工作:

select "P"$-3_tDate from t

这怎么了?如何将其转换为“ MM / dd / YYYY”字符串。

2 个答案:

答案 0 :(得分:1)

这就是我要做的事情:

````

q)t:([]10#1542776400000)
q)select "/"0:`mm`dd`year$\:"P"$10$string x from t
x
------------
"11/21/2018"
"11/21/2018"
"11/21/2018"

````

答案 1 :(得分:0)

您需要首先将long的值转换为string

q)select `date$"P"$-3_/:string tDate from t
tDate
----------
2018.11.23
2018.11.21
2018.11.21

可以通过以下方式将date转换为“ MM / dd / YYYY”格式:

q)f:{ d:"." vs x; "/" sv (d 1;d 2;d 0)}
q)select f each  string `date$"P"$-3_/:string tDate from t
tDate
------------
"11/23/2018"
"11/21/2018"
"11/21/2018"
"11/21/2018"

如果您对任何其他格式感兴趣,则必须通过定义上面的f之类的自定义函数来操作字符串。

或者您可以浏览datetimeQ GitHub库,该库支持excel样式格式。

例如

q).dtf.format["d mmmm, dddd ,yyyy"; 2018.06.18];
"18 June, Tuesday ,2018"