将 Unix 纪元时间转换为扩展的 ISO8601
Posted
技术标签:
【中文标题】将 Unix 纪元时间转换为扩展的 ISO8601【英文标题】:Converting Unix epoch time to extended ISO8601 【发布时间】:2017-08-13 03:43:30 【问题描述】:我有 3 个表我想使用日期来处理,但是其中一个表包含 unix 纪元格式的日期。以下是 3 个字段的示例:
Table1: 2017-02-01T07:58:40.756031Z
Table2: 2017-02-07T10:16:46Z
Table3: 1489236559
我想将表 3 中的日期转换为尽可能接近表 2 的格式。这就是我现在拥有的:
SELECT cast(from_unixtime(tstart) as timestamp) as ISODATE from scada_logs
这给了我一些非常接近的东西,但并不完全在那里。这是我得到的:
ISODATE
2017-03-20 14:31:06.000
2017-03-20 14:31:06.000
我已经玩了几个小时了,但我没有更进一步。有人有什么想法吗?
谢谢!
【问题讨论】:
【参考方案1】:选项 1:日期格式
presto> select date_format(from_unixtime(1489236559),'%Y-%m-%dT%H:%i:%sZ');
_col0
----------------------
2017-03-11T12:49:19Z
选项 2:to_iso8601
presto> select to_iso8601(from_unixtime(1489236559));
_col0
--------------------------
2017-03-11T12:49:19.000Z
【讨论】:
不幸的是,这对我不起作用,我收到一个错误:SYNTAX_ERROR: line 1:33: Column 'yyyy-mm-dd't'hh:mm:ss'z'' cannot be解决。这实际上是在使用 Hive 的 AWS Athena 上。也许它是一个非标准版本? 实际上 AWS Athena 使用的是 prestodb 而不是 hiveql。查看更新的答案 对于不支持date_format
(即 V1.2 之前)的旧 Hive 版本,您仍然可以使用旧的 printf
...cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
@SamsonScharfrichter - AWS Athena 使用 presto,而不是 HiveQL以上是关于将 Unix 纪元时间转换为扩展的 ISO8601的主要内容,如果未能解决你的问题,请参考以下文章
在Java中将ISO 8601时间戳字符串转换为纪元秒[重复]
如何使用 Shell 将 ISO 8601 时间戳转换为 Unix 时间戳?