如何在HIVE中将日期字符串从UTC转换为特定的TimeZone?

时间:2015-02-13 20:59:56

标签: hadoop timezone hive bigdata hive-udf

我的Hive表有一个带有UTC日期字符串的日期列。我希望得到特定EST日期的所有行。

我正在尝试做类似下面的事情:

Select * 
from TableName T
where TO_DATE(ConvertToESTTimeZone(T.date))  = "2014-01-12" 

我想知道ConvertToESTTimeZone是否有函数,或者我是如何实现的?

我尝试了以下但是它不起作用(我的默认时区是CST):

TO_DATE(from_utc_timestamp(T.Date) = "2014-01-12" 
TO_DATE( from_utc_timestamp(to_utc_timestamp (unix_timestamp (T.date), 'CST'),'EST'))

提前致谢。

更新

Strange behavior. When I do this:

select "2014-01-12T15:53:00.000Z", TO_DATE(FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP("2014-01-12T15:53:00.000Z", "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'"), 'EST')) 
from TABLE_NAME T1
limit 3

我得到了

    _c0                          _c1
0   2014-01-12T15:53:00.000Z    1970-01-16
1   2014-01-12T15:53:00.000Z    1970-01-16
2   2014-01-12T15:53:00.000Z    1970-01-16

1 个答案:

答案 0 :(得分:15)

您的系统时区CST与在Hive中将UTC转换为EST无关。您应该能够通过以下方式获得正确的结果:

TO_DATE(FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP(T.date, "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'") * 1000, 'EST'))

请注意,由于UNIX_TIMESTAMP返回秒数,您将丢失时间戳的毫秒分量。