在 Hive 中仅将时间转换为 unix 时间戳

Converting only time to unixtimestamp in Hive

我有一列 eventtime,它只将一天中的时间存储为字符串。例如: 0445AM - 表示 04:45 AM。我正在使用以下查询转换为 UNIX 时间戳。

select unix_timestamp(eventtime,'hhmmaa'),eventtime from data_raw limit 10;

这似乎适用于测试数据。我一直认为 unixtimestamp 是日期和时间的组合,而这里我只有时间。我的问题是执行上述功能时考虑的日期是什么时候?时间戳似乎很小。

Unix 时间戳是从 Unix 纪元 (1970-01-01 00:00:00 UTC) 开始的 bigint 秒数。 unix 时间戳是一种将时间跟踪为 运行 总秒数的方法。

select unix_timestamp('0445AM','hhmmaa') as unixtimestamp

Returns

17100

而这恰好是 4 小时 45 分钟换算成秒。

select 4*60*60 + 45*60

returns 17100

并使用 from_unixtime 函数

将其转换回来
select from_unixtime (17100,'hhmmaa') 

returns:

0445AM

如果您使用包含日期的格式进行转换,您会看到它假定日期为 1970-01-01

select from_unixtime (17100,'yyyy-MM-dd hhmmaa') 

returns:

1970-01-01 0445AM

参见 Hive 函数 dosc here

还有一个关于 Unix timestamp

的非常有用的网站