2013-10-14 65 views
1

我有帶時間戳值的字符串,例如「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'))

回答

2

對於一切在您的字符串中除時區偏移量外,此模式將起作用:

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模式不匹配)。

+0

第二個示例用Hive 1.1.0和Java 7返回NULL。 –

相關問題