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

Var*_*pta 1 hadoop hive hortonworks-data-platform

我有时间戳值的字符串,如"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'))

小智 5

对于除时区偏移之外的字符串中的所有内容,此模式将起作用:

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

SimpleDateFormat的模式在这里.

附加模式XXX应该处理您的时区偏移.但正如本页本页所述,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"))
Run Code Online (Sandbox Code Playgroud)

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