我有时间戳值的字符串,例如" 2013-02-02T04:04:11.240-4:00"。
所以目标是转换时间戳格式,如2013-02-02 04:04:11。我怎么能这样做。
此命令正常
from_unixtime(unix_timestamp(substr(' 20130502081559999',1,14),' yyyyMMddHHmmss'))
但是当我尝试这样的事情时,会给出错误的&#39; <&#39;
from_unixtime(unix_timestamp(substr(&#39; 2013-05-02T08:15:59.999-4:00&#39; 1,19),&#39; yyyy-MM-ddTHH:mm:ss&#39 ;))
答案 0 :(得分:5)
对于除时区偏移之外的字符串中的所有内容,此模式将起作用:
from_unixtime(unix_timestamp("2013-02-02T04:04:11.240", "yyyy-MM-dd'T'HH:mm:ss.SSS"))
SimpleDateFormat的模式是here。
附加模式XXX应该处理您的时区偏移。但正如this page和this 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模式不匹配)。