将带时区的字符串转换为 unix 时间戳

Posted

技术标签:

【中文标题】将带时区的字符串转换为 unix 时间戳【英文标题】:Convert string with timezone to unix timestamp 【发布时间】:2019-01-02 19:47:10 【问题描述】:

我正在尝试将具有特定时区(不是 UTC)的字符串转换为 unix 时间戳

使用unix_timestamp 函数从UTC 字符串转换效果很好:

hive> select unix_timestamp("2018-12-31 23:59:59 UTC", "yyyy-MM-dd HH:mm:ss z") as unixtime;
unixtime
1546300799

但是,当我只是更改时区(更改为另一个有效的 TZ 名称)时,它不起作用:

hive> select unix_timestamp("2018-12-31 23:59:59 America/Sao_Paulo", "yyyy-MM-dd HH:mm:ss z") as unixtime;
unixtime
NULL

有什么建议吗?

【问题讨论】:

How to convert a Date String from UTC to Specific TimeZone in HIVE?的可能重复 它可能与 ***.com/q/28508640/10455534 重复 - 检查也许你可以在那里找到答案 是的,它相似,但不完全相同。当我们已经有了 UTC 字符串(如第一个示例中所示)时,函数 unix_timestamp 很容易使用。因此,一旦我们获得 unix 时间戳,将 UTC 字符串转换为其他时区就很简单了。该函数似乎无法以相反的方式工作,即从给定时区中的字符串到 unix 时间戳。 【参考方案1】:

您的问题是时区本身,我的理解是使用 java cannonical id(“America/Sao_Paulo”)没有直接的方法来做到这一点。您正在查找的日期的正确格式(完整)应该是

select unix_timestamp("2018-12-31 23:59:59 Brasilia Summer Time", "yyyy-MM-dd HH:mm:ss zzzz") as unixtime;

【讨论】:

以上是关于将带时区的字符串转换为 unix 时间戳的主要内容,如果未能解决你的问题,请参考以下文章

在 VBA 中,如何以简单的方式将 UTC UNIX 时间戳转换为本地时区日期?

Unix 纪元时间戳在 Python 中转换为 UTC 时区

php怎么将指定日期转换为时间戳?

Python pytz 将时间戳(字符串格式)从一个时区转换为另一个时区

php怎么将指定日期转换为时间戳

在 Python 3 的 Pytz 模块中将 EST、CST 和 DST 时区转换为 unix 时间戳