如何在KDB Q中解析CSV文件内的ISO8601格式datetime时间戳
KDB/Q解析ISO8601格式时间戳的操作方法
你可以选择读取时直接转换,或者读取完成后单独转换时间列,两种方式的操作如下:
方式1:读取文件时直接解析为时间类型
你当前的读取代码中,用"S"将时间列识别为字符串类型,只需把对应位置的S替换为kdb时间类型标识即可:
带时区后缀Z的ISO8601时间戳可以直接用"P"(timestamp,纳秒精度)或者"Z"(datetime)识别,kdb会自动匹配格式
示例代码:
f: `:/home/chris/sync/us_equities/AAPL.csv // 把首字段的S替换为P,读取后t列直接是timestamp类型 data: flip `t`o`h`l`c`v!("PFFFFI";",")0: f
如果只需要保留分钟级精度,也可以直接用"m"替换S,一步得到minute类型的时间列。
方式2:已读取数据的情况下转换时间列
如果你已经将数据读取为字符串列存储,可以用类型转换符直接对整列做转换:
// 假设已读入的表存在变量data中 data: update t: "P"$t from data
如果需要转为其他时间粒度,可按需选择目标类型:
- 转日期:
update t: "D"$t from data - 转分钟:
update t: "m"$t from data - 转datetime:
update t: "z"$t from data
类型验证
执行meta data即可查看表的列类型,确认t列已经从字符串/symbol类型转为目标时间类型即可。
内容的提问来源于stack exchange,提问作者cjm2671
相关产品推荐
相关产品推荐

