将字符串转换为时间戳配置单元

uyhoqukh  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(371)

我有一个带有时间戳值的字符串,比如“2013-02-02t04:04:11.240-4:00”。
所以目标是转换成时间戳格式,比如2013-02-02 04:04:11。我该怎么做。
这个命令行得通
来自unixtime(unix时间戳(substr('20130502081559999',1,14),'yyyymmddhhmmss'))
但当我尝试这样的东西时,它会给出错误的't'
来自unixtime(unix时间戳(substr('2013-05-02t08:15:59.999-4:00',1,19),'yyyy-mm-ddthh:mm:ss'))

r8xiu3jd

r8xiu3jd1#

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

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

SimpleDataFormat的模式在这里。
额外的模式应该处理你的时区偏移。但正如本页和本页所述,x模式是在java7中引入的。
如果您运行的是早期版本的java(比如我—我的cloudera quickstart vm使用1.6.0\u32),那么您必须执行一些额外的操作才能使其正常工作。一种方法是:

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\u replace将冒号(:)从时区偏移中剥离出来。如果需要,最外层的regexp\u会用一个额外的零来替换时区偏移量(即-4:00变为-0400,这与z模式匹配)。注意,-400与z模式不匹配)。

相关问题