如何将日期字符串从utc转换为配置单元中的特定时区?

31moq8wy  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(409)

我的配置单元表有一个带有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
cwtwac6a

cwtwac6a1#

这将转换为夏令时轮班的cst:

to_date(FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP(eff_timestamp, "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'") * 1000, 'CST6CDT'))
cwtwac6a

cwtwac6a2#

您的系统时区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 返回秒,则时间戳的毫秒部分将丢失。

相关问题