我正在尝试编写一个配置单元查询,它将为时间戳值添加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
. 我做错什么了?
另外,另一个观察结果是,并非所有的价值观都是如此;对于某些值,上述计算给出了正确的结果。
有没有更好的方法来做小时加法和时间戳比较?
1条答案
按热度按时间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。