【问题标题】:Hive's unix_timestamp and from_unixtime functionsHive 的 unix_timestamp 和 from_unixtime 函数
【发布时间】:2015-07-29 13:28:35
【问题描述】:

我的印象是 unix_timestampfrom_unixtime Hive 函数是彼此“反向”的。

当我尝试在 Hive 中将时间戳字符串转换为秒时:

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');

我得到 10-Dec-14 10.00.00.120 AM,这显然不等于原来的。

有人可以解释发生了什么吗?谢谢。

【问题讨论】:

    标签: hive hiveql


    【解决方案1】:

    来自语言手册:

    将具有给定模式的时间字符串转换为 Unix 时间戳(以秒为单位) 此函数的结果以秒为单位。

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

    SELECT unix_timestamp('10-Jun-15 10.00.00 AM', 'dd-MMM-yy hh.mm.ss a');

    1433930400

    SELECT from_unixtime(1433930400, 'dd-MMM-yy hh.mm.ss a');

    2015 年 6 月 10 日上午 10 点

    【讨论】:

    • 谢谢。我在第二部分弄错了。 ss 而不是 MS。现在一切正常。
    【解决方案2】:

    不要像在第二个查询中那样使用 from unix_timestamp 。此外,您的语句中有一个格式,它给出了使用 DEC 代替 12 的结果。请参阅dd-MM-yy。不要指定格式,它应该可以工作。请参阅下面的示例。

    但是,from_unixtime()unix_timestamp() 用于从时间字符串来回转换是正确的。

    select unix_timestamp('2015-04-09 03:04:26') from dual;
    

    结果为“1428566666”

    select from_unixtime(1428566666) from dual;
    

    结果为“2015-04-09 03:04:26”

    【讨论】:

      猜你喜欢
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 2015-05-07
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多