2017-06-20 1642 views

回答

2

需要引用TZ

hive> select unix_timestamp('2011-03-01T00:00:04.226Z', "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'"); 
OK 
1298959204 

或者試試這個,如果你不害怕笨拙:

select unix_timestamp(cast(regexp_replace('2011-03-01T00:00:04.226Z', '(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}).(\\d{3})Z', '$1-$2-$3 $4:$5:$6.$7') as timestamp)) 

EST轉換爲UTC,使用以下命令:

hive> select to_utc_timestamp(unix_timestamp('2011-03-01T00:00:04.226Z', "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'")*1000, 'EST'); 
OK 
2011-03-01 05:00:04 

Multiplicati與1000是必需的,因爲從Hive Language Manual

小數值被視爲秒。整數值被認爲是毫秒。例如to_utc_timestamp(2592000.0,'PST'),to_utc_timestamp(2592000000,'PST')和to_utc_timestamp(timestamp'1970-01-30 16:00:00','PST')都返回timestamp 1970-01-31 00:00:00

+0

這真的很棒! –

+0

返回一個bigint類型。你知道爲什麼我不能使用'to_utc_timestamp(mytime,'EST')'mytime是我們剛剛創建的'unix_timestamp'嗎?你將如何將它轉換爲時間戳類型? –

+0

假設原始時間戳在'EST'中,我希望它在'GMT' –