![93636ac0e244b325173b484b62161a89.png](https://img-blog.csdnimg.cn/img_convert/93636ac0e244b325173b484b62161a89.png)
TIMESTAMP的值可以是整数,也就是距离Unix新纪元时间(1970年1月1日,午夜12点)的秒数;也可以是浮点数,即距离Unix新纪元时间的秒数,精确到纳秒(小数点后保留9位数);还可以是字符串,即JDBC所约定的时间字符串格式,格式为YYYY-MM-DD hh:mm:ss.fffffffff。
TIMESTAMP表示的是UTC时间,即协调世界时。UTC现在作为世界标准时间使用。
可以用from_utc_timestamp把UTC标准时间切换到北京时间:
-- 假如现在有UTC时间:'1970-01-01 00:00:00',把它转为北京时间,hiveSql如下:
select from_utc_timestamp('1970-01-01 00:00:00','PRC') as bj_time;
>> 1970-01-01 08:00:00.0
注意点:
Hive中使用current_timestamp()函数获取当前时间,精确到 毫秒
select current_timestamp();
>> 2020-12-30 14:33:40.807
Hive中获取当前时间戳,默认使用unix_timestamp()函数,精确到 秒
select unix_timestamp();
>> 1609310174
-- 注意是10位
Hive中将时间戳转换为日期类型,默认使用from_unixtime()
select from_unixtime(0,'yyyy-MM-dd HH:mm:ss');
>> 1970-01-01 08:00:00
第一个参数只能是int类型的时间戳,第二个参数为时间格式的字符串,第二个参数也可以为空,默认时间格式为:yyyy-MM-dd HH:mm:ss
Hive中to_utc_timestamp()函数,将毫秒级别的时间戳转换为指定格式的毫秒时间
select to_utc_timestamp(1559461463324,'GMT');
>> 2019-06-02 15:44:23.324
-- 注意是13位
select date_format(to_utc_timestamp(1559461463324,'GMT'),'yyyyMMddHHmmssSSS');
>> 20190602154423324
select date_format(to_utc_timestamp(1559461463324,'GMT'),'yyyy/MM/dd HH:mm:ss.SSS')
>> 2019/06/02 15:44:23.324
-- Hive中获取时间戳的方式为unix_timestamp()函数,该函数只能够精确到秒级别的时间,对于时间精确到要求高的应用则该函数并不适合。
-- Hive获取当前时间毫秒级别的时间戳时需要使用cast函数将current_timestamp()转为double类型并乘以1000,则得到毫秒级别的时间戳。
-- 对于Hive库中存储的毫秒精度的时间戳,为了确保时间精度不损失则需要使用to_utc_timestamp()函数,该函数支持毫秒级别的时间错,但需要指定当前时区。