在hive中將UTC轉爲正常時間的方法

如何在Hive中將UTC的時間轉爲咱們經常使用的時間呢?簡單往下看!html

先來看看官方怎麼說java

Return Typesql

Name(Signature)服務器

Descriptionoracle

bigintpost

unix_timestamp(string date, string pattern)spa

Convert time string with given pattern (see [http://docs.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html])   to Unix time stamp (in seconds), return 0 if fail:   unix_timestamp('2009-03-20', 'yyyy-MM-dd') = 1237532400.unix

stringpostgresql

from_unixtime(bigint unixtime[, string format])code

Converts the number of seconds from unix epoch   (1970-01-01 00:00:00 UTC) to a string representing the timestamp of that   moment in the current system time zone in the format of "1970-01-01   00:00:00".

看第二行,使用from_unixtime將UTC轉爲string時間,這裏雖然這樣說了,可是在處理的時候仍是有要注意的地方的(注意下面的/1000

SELECT from_unixtime(cast(1426041039030/1000 as bigint));

返回值爲

2015-03-11 10:30:39

爲了驗證個人轉換是否正確,我再使用postgresql進行一下轉換

SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 1426041039030 * INTERVAL '1 MILLISECONDS'

結果爲

2015-03-11 10:30:39.03+08

看到了是正確的,那個時間是帶時區的,hive自動按服務器所在時區進行轉換了。

擴展一下

若是要將正常的時間轉爲UTC呢?看下面

 select unix_timestamp('2015-03-11 10:30:39');
 select unix_timestamp('2015-03-11 10:30:39.03');

返回值爲

1426041039

是否是發現和原來的

1426041039030

不同,對少了030,這個是微妙數,這個我怎麼也弄不出來,可是少了030再反轉到正常時間後,就會出現問題了,這個問題等我解決了會再修改這篇博客。

相關文章
相關標籤/搜索