Iam*_*619 13 timestamp hive utc
我在互联网上搜索了很多,却找不到答案.这是我的问题:
我正在Hive中写一些查询.我有一个UTC时间戳,并希望将其更改为UTC时间,例如,给定时间戳1349049600,我想将其转换为UTC时间,即2012-10-01 00:00:00.但是如果我from_unixtime(1349049600)在Hive中使用内置函数,我会得到本地PDT时间2012-09-30 17:00:00.
我意识到有一个内置函数叫做from_utc_timestamp(timestamp, string timezone).然后我尝试了from_utc_timestamp(1349049600, "GMT"),输出是1970-01-16 06:44:09.6这是完全错误的.
我不想永久更改Hive的时区,因为还有其他用户.那么我有什么方法可以获得从1349049600到"2012-10-01 00:00:00"的UTC时间戳字符串?非常感谢!!
pat*_*rry 15
据我所知,from_utc_timestamp()需要一个日期字符串参数,比如"2014-01-15 11:21:15",不是unix seconds-since-epoch值.这可能就是为什么当你传递一个整数时它会给出奇怪的结果?
处理epoch秒的唯一Hive函数似乎是from_unixtime()在服务器时区给你一个时间戳字符串,我发现/etc/sysconfig/clock- "America/Montreal"在我的情况下.
因此,您可以通过获取UTC时间戳字符串to_utc_timestamp(from_unixtime(1389802875),'America/Montreal'),然后使用转换为目标时区from_utc_timestamp()
这一切看起来都很折磨,尤其是必须将服务器TZ连接到SQL中.如果有某种from_unixtime_utc()功能或某事,生活会更容易.
更新:from_utc_timestamp()确实处理毫秒参数和字符串,但然后转换错误.
当我尝试from_utc_timestamp(1389802875000, 'America/Los_Angeles')它给出"2014-01-15 03:21:15"哪个是错的.
正确的答案是"2014-01-15 08:21:15"你可以获得(蒙特利尔的服务器)通过from_utc_timestamp(to_utc_timestamp(from_unixtime(1389802875),'America/Montreal'), 'America/Los_Angeles')
小智 6
嘿,只是想在这里添加一点,我建议尝试“自动化”系统时区。所以不是静态的
#STATIC TZ deceleration
to_utc_timestamp(from_unixtime(1389802875),'America/Montreal')
Run Code Online (Sandbox Code Playgroud)
试一下
#DYNAMIC TZ
select to_utc_timestamp(from_unixtime(1389802875), from_unixtime(unix_timestamp(), "z"));
Run Code Online (Sandbox Code Playgroud)
这仅使用字符串输出格式“ from_unixtime”返回时区字符串(小写字母z)
San*_*man -2
我访问currentmillis.com并粘贴了 1349049600,但没有意识到这实际上是秒。事实上它在日期中返回了 1970-01-16,这意味着您建议的函数: from_utc_timestamp 实际上将毫秒作为第一个参数?也许你可以再试一次from_utc_timestamp(1349049600000, "GMT")?
| 归档时间: |
|
| 查看次数: |
50289 次 |
| 最近记录: |