配置单元unix\u时间戳函数计算不匹配

wpx232ag  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(261)

我正在尝试编写一个配置单元查询,它将为时间戳值添加6个小时,然后将它与其他时间戳进行比较。
我使用的方法是使用 unix_timestamp() 函数,然后向其添加21600秒,以便最终值比初始值提前6小时。

hive> select unix_timestamp('2014-11-02 00:58:20') from unix_tmp limit 1;
OK
1414907900

1414907900 + 66060 = 1414929500

hive> select from_unixtime(1414929500) from unix_tmp limit 1;
OK
2014-11-02 05:58:20

我认为小时值应该是 06 而不是 05 . 我做错什么了?
另外,另一个观察结果是,并非所有的价值观都是如此;对于某些值,上述计算给出了正确的结果。
有没有更好的方法来做小时加法和时间戳比较?

bcs8qyzn

bcs8qyzn1#

正如医生所说: unix_timestamp(string date) 使用默认时区和默认区域设置,将格式为yyyy-mm-dd hh:mm:ss的时间字符串转换为unix时间戳(以秒为单位),如果失败,则返回0: from_unixtime(bigint unixtime[, string format]) 将unix epoch(1970-01-01 00:00:00 utc)中的秒数转换为表示当前系统时区中该时刻的时间戳的字符串,格式为“1970-01-01 00:00:00”。
解决方案 from_utc_timestamp(timestamp, string timezone) 假设给定的时间戳是utc,并转换为给定的时区(从配置单元0.8.0开始)。例如,from \u utc \u timestamp('1970-01-01 08:00:00','pst')返回1970-01-01 00:00:00。 to_utc_timestamp(timestamp, string timezone) 假设给定的时间戳在给定的时区内,并转换为utc(从配置单元0.8.0开始)。例如,to \u utc \u timestamp('1970-01-01 00:00:00','pst')返回1970-01-01 08:00:00。

相关问题