hive13位时间戳转换成时间:13秒的换算结果
把13作为hive13位时间戳转换成时间的输入时,结果是毫秒值13000,对应UTC时间1970-01-01 00:00:13。这个数值说明13位时间戳按毫秒解释,13000毫秒等于13秒。
在线工具时间戳转换
13这个参数算出来到底是什么
输入13,工具返回的unix字段是13,milliseconds字段是13000,iso是1970-01-01T00:00:13.000Z,utc是1970-01-01 00:00:13。这里容易混淆的是:13本身是毫秒数,但显示成UTC时是13秒,因为13000毫秒正好是13秒。如果你在Hive里拿到一个13位时间戳,它通常表示从1970-01-01 00:00:00 UTC起经过的毫秒数,13就代表经过了13毫秒,但工具展示的UTC时间把13000毫秒解释为13秒,这中间差了一个数量级。实际处理时,先确认字段是秒还是毫秒,再决定是否除以1000。
相邻参数对照:12、14和13的差别
把12、13、14放在一起看,能更清楚边界。输入12,毫秒是12000,UTC是1970-01-01 00:00:12;输入14,毫秒是14000,UTC是1970-01-01 00:00:14。13正好落在中间,毫秒13000,UTC 1970-01-01 00:00:13。三个值只差1,但换算后的秒数也各差1。这种对照在排查数据时很有用:如果Hive表里某列出现12、13、14这样的连续值,基本可以判断它是毫秒级时间戳,而不是秒级。
从13出发,反向换算怎么验证
反向验证可以从UTC时间倒推。1970-01-01 00:00:13对应的秒是13,乘以1000得到13000毫秒,与工具输出的milliseconds一致。如果拿到的13位时间戳是13,想还原成可读时间,先按毫秒处理,再格式化成UTC,就得到1970-01-01 00:00:13。若在Hive里用from_unixtime,注意它默认按秒处理,直接传13会得到1970-01-01 00:00:13,但传13000会得到1970-01-01 03:36:40,差别很大。所以先判断单位,再决定是否除以1000。
13位时间戳在Hive里的常见处理位置
Hive中13位时间戳常出现在日志表、埋点表或外部导入的JSON字段里。处理时一般先转成bigint,再除以1000取整,最后用from_unixtime转成字符串。如果只是临时查看,也可以借助时间戳转换工具直接输入13,看毫秒和UTC的对应关系。需要补充Java侧处理思路时,可以参考13位时间戳转换成时间java的实用教程,里面讲了Long和Date的转换细节。
容易踩的坑:13不是秒而是毫秒
很多人看到13就以为是13秒,但13位时间戳的“13位”指的是长度,不是数值大小。13作为数值只有两位,但它仍然按毫秒解释,所以13000毫秒对应13秒。如果误把它当秒,直接from_unixtime(13)会得到1970-01-01 00:00:13,看似正确,其实是因为13秒和13000毫秒在UTC显示上恰好都是00:00:13,这种巧合容易让人忽略单位问题。换一个值,比如3613,毫秒是3613000,UTC是1970-01-01 01:00:13,如果当秒处理就会得到完全不同的日期。
总结
13作为hive13位时间戳转换成时间的输入,得到毫秒13000、UTC 1970-01-01 00:00:13,本质是13秒的毫秒表示;对照12和14可以确认相邻值各差1秒。
相关文章
- jq13位时间戳转换成日期:参数结果核对
说明参数13按Unix秒转换后的UTC日期,并区分数值13与13位毫秒时间戳。
- jq12位时间戳转换成日期:12 对应哪一刻?
参数 12 按 Unix 时间戳换算,对应 1970-01-01 00:00:12(UTC),毫秒数为 12000。本文说明结果含义、换算步骤与相邻参数对照。
- jdk8将时间戳转换成instant:8秒的转换结果
在JDK8中把时间戳8转换为Instant,结果是1970-01-01T00:00:08Z,对应UTC时间00:00:08,毫秒值8000。
- java时间戳转换日期格式14位:先分清秒与毫秒
从14位时间戳的位数困惑讲起,用实例说明秒与毫秒的差别,并给出Java格式化日期与排查错误的做法。
- java时间戳转换成时间6:从参数6看懂秒级换算
以参数6为例,讲清Java时间戳换算成时间的思路:秒与毫秒的区别、UTC与本地时区、边界值与常见报错排查。
常见问题
Q1输入13,为什么毫秒显示13000而不是13?
因为13位时间戳按毫秒解释,输入13表示13毫秒,工具把毫秒值展开成13000,同时UTC显示为1970-01-01 00:00:13,对应13秒。
Q213和12、14的换算结果差多少?
12对应毫秒12000、UTC 1970-01-01 00:00:12;13对应13000、00:00:13;14对应14000、00:00:14,相邻值各差1秒。
Q3在Hive里直接把13传给from_unixtime会怎样?
from_unixtime默认按秒处理,传13会得到1970-01-01 00:00:13,和按毫秒处理13000后显示的UTC时间相同,但这是巧合,换其他值就会不一致。
Q413位时间戳转换成时间时,需要先除以1000吗?
如果目标函数按秒处理,需要先除以1000再取整;如果工具已经按毫秒解析,就不用再除。关键看下游函数对单位的约定。