如何在Q / KDB中生成格式化的日期字符串?

问题描述 投票:2回答:5

如何从Q日期类型生成ISO日期字符串“yyyy-MM-dd”?我看着连接各个部分但是甚至无法获得日/月,例如d:2015.12.01;d.month打印2015.12,即不仅仅是月份。

kdb q-lang isodate
5个回答
3
投票
q)"-" sv "." vs string[2015.12.01]
"2015-12-01"

来自字符串的vs矢量,由“。”分割。以上; sv字符串到向量,通过上面的“ - ”加入。

请记住,字符串只是一个char数组,因此您可以根据需要使用索引来获取每个部分。但是以上是有用的,因为vs的结果矢量给出了一个3长度的矢量,你可以按照自己喜欢的方式进行操作


4
投票

如果您打算大规模地进行(即大型向量/日期列表或表格中的列),并且您确定日期总是格式良好,那么您可以使用点修改:

q)update .[;(::;4 7);:;"-"]string date from ([] date:2#.z.D)
date
------------
"2016-01-04"
"2016-01-04"

这样您就不必应用于向量/列表的“每个”条目,它可以在向量/列表本身上工作。


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"

0
投票

请在update语句中更改-/之类的分隔符。

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"

0
投票

检查此GitHub library的日期时间格式。它支持格式化日期和时间的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"
© www.soinside.com 2019 - 2024. All rights reserved.