如何将毫秒级Unix时间戳转换为KDB原生时间戳?
KDB毫秒级Unix时间戳转原生时间戳方法
KDB的原生timestamp类型(格式符"P")是以2000年1月1日00:00:00为基准的纳秒数,而Unix时间戳是以1970年1月1日00:00:00为基准的毫秒数,直接用字符串转换会失败,因为"P"格式符无法解析Unix时间戳字符串。以下是两种实用的转换方法:
方法一:通过datetime中转
先将毫秒级时间戳转为Unix秒数,用"U"格式符转成datetime类型,再转成timestamp:
q)msTs:1673240400000 q)"P"$"U"$msTs%1000 2023.01.09D11:00:00.000000000
方法二:直接计算纳秒偏移
先把毫秒转成纳秒,再加上1970到2000的基准偏移量(固定为946684800000000000纳秒,等于long$"P"$0-"U"$0),结果直接是timestamp类型:
q)msTs:1673240400000 q)(msTs*1000000)+946684800000000000 2023.01.09D11:00:00.000000000
错误写法原因
你之前尝试的"P"$ string (1673240400000 % 1000)之所以失败,是因为"P"格式符仅能解析"YYYY.MM.DDDD:HH:MM:SS.NNNNNNNNN"格式的字符串,无法识别Unix秒数字符串。
内容的提问来源于stack exchange,提问作者cjm2671
相关产品推荐
相关产品推荐

