Hive 配置单元的unix_时间戳和from_unixtime函数

Hive 配置单元的unix_时间戳和from_unixtime函数,hive,hiveql,Hive,Hiveql,我的印象是unix_timestamp和from_unixtime配置单元函数彼此“相反” 当我尝试在配置单元中将时间戳字符串转换为秒时: SELECT unix_timestamp('10-Jun-15 10.00.00.000000 AM', 'dd-MMM-yy hh.mm.ss.MS a'); 我得到1418176800 当我尝试将1418176800转换为时间戳字符串时: SELECT from_unixtime(1418176800, 'dd-MMM-yy hh.mm.ss.MS

我的印象是unix_timestamp和from_unixtime配置单元函数彼此“相反”

当我尝试在配置单元中将时间戳字符串转换为秒时:

SELECT unix_timestamp('10-Jun-15 10.00.00.000000 AM', 'dd-MMM-yy hh.mm.ss.MS a');
我得到1418176800

当我尝试将1418176800转换为时间戳字符串时:

SELECT from_unixtime(1418176800, 'dd-MMM-yy hh.mm.ss.MS a');
我得到的是2014年12月10日上午10.00.00.120,这显然不等于原来的时间


有人能解释一下发生了什么事吗?谢谢。

来自语言手册:

以秒为单位将具有给定模式的时间字符串转换为Unix时间戳 此功能的结果以秒为单位

结果随日期的毫秒部分而变化,但unix函数只支持秒。例如:

选择unix_时间戳'10-Jun-15 10.00.00 AM','dd-MMM-yy-hh.mm.ss a'

14330930400

从_unixtime1433930400“dd MMM yy hh.mm.ss a”中选择


2015年6月10日上午10.00.00

不要像在第二次查询中那样使用from unix\u时间戳。此外,您的语句中有一个格式,它给出了使用DEC而不是12的结果。见年月日。不要指定格式,它应该可以工作。请参见下面的示例

但是,使用from_unixtime和unix_timestamp从时间字符串来回转换是正确的

select unix_timestamp('2015-04-09 03:04:26') from dual;
结果为14285666

select from_unixtime(1428566666) from dual;

2015-04-09 03:04:26的结果谢谢。我在次秒部分搞错了。ss而不是MS。现在一切都正常了。