16

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

有人可以帮忙吗?

我使用的是 8.3 版

4

1 回答 1

37

这在手册中有介绍,但如何实际使用日期/时间并不总是很明显。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两次。一次将输入转换timestamptimestamptz根据参数时区,然后另一个将其转换timestamp为 UTC 时间。

不幸的是,由于 SQL 规范为 定义的(IMO 疯狂)方式AT TIME ZONETIME您不能对TIME. 您必须改为操作TimeZone变量:

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

这仍然给你一个timetznot a time。因此其显示值随timezone设置而变化。

于 2013-08-12T19:13:45.943 回答