【问题标题】:How to convert local time to UTC?如何将本地时间转换为 UTC?
【发布时间】:2013-08-13 19:59:38
【问题描述】:

我需要使用函数将本地时间转换为 UTC。我的输入是当地时间,当地时间的时区(例如“太平洋/奥克兰”)。我需要从程序中得到的是基于给定时区的当地时间的 UTC 时间。

有人可以帮忙吗?

我使用的是 8.3 版

【问题讨论】:

标签: postgresql


【解决方案1】:

manual 对此进行了介绍,但如何实际处理日期/时间并不总是很明显。 SQL 规范有点奇怪。

对于您的问题,不清楚您是要以 UTC 格式存储时间但以服务器的本地时间 (TimeZone) 显示它,还是要忽略 TimeZone 并始终显示它作为UTC。我假设是后者。

对于时间戳,您只需使用两次AT TIME ZONE,例如:

SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';

您需要使用两次AT TIME ZONE。一次根据参数时区将输入 timestamp 转换为 timestamptz,然后在 UTC 将其转换为 timestamp

不幸的是,由于 SQL 规范为 TIME 定义 AT TIME ZONE 的(IMO 疯狂)方式,您不能为 TIME 做同样的事情。您将不得不操作 TimeZone 变量:

SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';

这仍然会给您留下timetz 而不是time。所以它的显示值随着timezone的设置而变化。

【讨论】:

  • +1 表示设置的 TimeZone,这是我试图将没有时区的时间戳转换为 utc timestampstz 的部分。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 2018-07-27
  • 2013-03-12
  • 2012-09-11
  • 2011-10-11
相关资源
最近更新 更多