KDB: конвертировать миллисекундный эпок в дату - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть таблица t со строковым столбцом tDate.

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 голосов
/ 24 ноября 2018

Вот как бы я поступил по этому поводу:

`` ``

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"

`` ``

0 голосов
/ 23 ноября 2018

Сначала необходимо преобразовать значения 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"
...