hive13位时间戳转换:13毫秒对应什么时间?

当输入参数为13时,hive13位时间戳转换的结果是:13毫秒,对应ISO时间1970-01-01T00:00:13.000Z,UTC时间1970-01-01 00:00:13。

在线工具时间戳转换

13这个参数到底转成了什么

把13当作13位时间戳来转换,工具输出的毫秒值是13000,ISO格式为1970-01-01T00:00:13.000Z,UTC显示为1970-01-01 00:00:13。也就是说,13毫秒落在Unix纪元起点之后第13秒的位置。这个结果看起来简单,但它是理解13位时间戳含义的起点:13位时间戳以毫秒为单位,数字13代表的是13毫秒,而不是13秒。

换算步骤拆解:从13到可读时间

换算时,先把13按毫秒处理,得到13000毫秒;再换算成秒为13秒;最后以1970-01-01 00:00:00 UTC为基准加上13秒,得到1970-01-01 00:00:13 UTC。整个过程依赖时间戳转换工具对毫秒单位的识别。如果想手动验证,可以借助时间戳转换工具输入13,观察输出是否一致。

相邻参数对照:12、13、14的差别

把12、13、14放在一起看,结果分别是1970-01-01T00:00:12.000Z、1970-01-01T00:00:13.000Z、1970-01-01T00:00:14.000Z,毫秒值对应12000、13000、14000。每增加1,时间就往后走1秒。再看673,输出是1970-01-01T00:11:13.000Z,说明673毫秒等于11分13秒,和13的秒数部分一致只是分钟不同。这种对照能帮助确认13位时间戳的毫秒单位没有歧义。

反向换算与边界情况

如果已知可读时间反推13位时间戳,同样以毫秒为单位。例如输入-3587,输出毫秒为-3587000,ISO为1969-12-31T23:00:13.000Z;输入-647,输出毫秒为-647000,ISO为1969-12-31T23:49:13.000Z。负数表示1970年之前的时间,反向换算时要注意符号和单位。对于13这样的正数,反向结果就是13000毫秒。

在Hive场景中怎么理解这个结果

Hive里常把13位时间戳存成bigint,用from_unixtime时通常需要先除以1000转成秒。参数13对应的秒级值是13,所以from_unixtime(13)会得到1970-01-01 00:00:13(UTC)。如果直接拿13当秒处理,结果会变成1970-01-01 00:00:13,和毫秒转换的UTC时间一致,因为13毫秒的秒级部分就是13秒。但换成673,毫秒转换的UTC是00:11:13,而直接当秒处理会得到00:11:13,秒数部分相同,分钟数不同——这里容易混淆,务必先确认单位。

总结

参数13的hive13位时间戳转换结果是13000毫秒,对应UTC时间1970-01-01 00:00:13。理解毫秒单位并注意与秒级时间戳的区分,能避免在Hive中误用from_unixtime。

相关文章

常见问题

Q1参数13的13位时间戳转换结果为什么是13秒而不是13毫秒?

13位时间戳以毫秒为单位,13毫秒换算成秒是13秒的整数部分,可读时间会显示到秒级,所以UTC显示为1970-01-01 00:00:13,实际毫秒值是13000。

Q213和12、14的转换结果有什么不同?

12对应1970-01-01T00:00:12.000Z,13对应1970-01-01T00:00:13.000Z,14对应1970-01-01T00:00:14.000Z,每增加1,时间增加1秒。

Q3在Hive里用from_unixtime处理13需要先除以1000吗?

from_unixtime接收秒级时间戳,13位时间戳是毫秒,所以需要先除以1000。参数13除以1000后取整为0秒,显示为1970-01-01 00:00:00;如果不除,直接传13,会显示1970-01-01 00:00:13。

Q4负数时间戳如-3587转换后是什么?

-3587作为13位时间戳时,毫秒值为-3587000,ISO为1969-12-31T23:00:13.000Z,UTC为1969-12-31 23:00:13,表示1970年之前的时间。