将 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时间戳字符串转换为纪元秒[重复]

将 ISO8601 字符串转换为自纪元以来的毫秒数

如何使用 Shell 将 ISO 8601 时间戳转换为 Unix 时间戳?

将 ISO 8601 转换为 unix 时间戳

如何在scala中将ISO 8601时间戳转换为unix时间戳?

如何将周数和年份转换为 unix 时间戳?