【问题标题】:Convert string to timestamp hive将字符串转换为时间戳配置单元
【发布时间】:2013-10-22 13:43:29
【问题描述】:

我有带有时间戳值的字符串,例如“2013-02-02T04:04:11.240-4:00”。

所以目标是转换为时间戳格式,如 2013-02-02 04:04:11。我该怎么做。

这个命令很好用

from_unixtime(unix_timestamp(substr('20130502081559999',1,14), 'yyyyMMddHHmmss'))

但是当我尝试这样的事情时,'T'会出错

from_unixtime(unix_timestamp(substr('2013-05-02T08:15:59.999-4:00',1,19), 'yyyy-MM-ddTHH:mm:ss'))

【问题讨论】:

    标签: hadoop hive hortonworks-data-platform


    【解决方案1】:

    对于字符串中除时区偏移量之外的所有内容,此模式都可以使用:

    from_unixtime(unix_timestamp("2013-02-02T04:04:11.240", "yyyy-MM-dd'T'HH:mm:ss.SSS"))
    

    SimpleDateFormat 的模式是here

    附加模式 XXX 应处理您的时区偏移。但正如 this pagethis page 所述,X 模式是在 Java 7 中引入的。

    如果您运行的是早期版本的 Java(像我一样 - 我的 Cloudera QuickStart VM 使用 1.6.0_32),则必须进行一些额外的操作才能使其正常工作。一种方法是:

    from_unixtime(unix_timestamp( 
        regexp_replace(
            regexp_replace("2013-02-02T04:04:11.240-4:00", "(.*):(.{2})$", "$1$2"),
        "(.*)-(.{3})$", "$1-0$2"), 
    "yyyy-MM-dd'T'HH:mm:ss.SSSZ"))
    

    最里面的 regexp_replace 将冒号 (:) 从时区偏移中去掉。如果需要,最外面的 regexp_replace 用额外的零填充时区偏移量(即 -4:00 变为 -0400,与 Z 模式匹配。请注意,-400 与 Z 模式不匹配)。

    【讨论】:

    • 第二个示例使用 Hive 1.1.0 和 java 7 返回 NULL。
    猜你喜欢
    • 1970-01-01
    • 2021-10-11
    • 2020-11-22
    • 2020-11-05
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多