我需要使用函数将本地时间转换为 UTC。我的输入是当地时间,当地时间的时区(例如“太平洋/奥克兰”)。我需要从该过程中获得的是基于给定时区的当地时间的 UTC 时间。
有人可以帮忙吗?
我使用的是 8.3 版
我需要使用函数将本地时间转换为 UTC。我的输入是当地时间,当地时间的时区(例如“太平洋/奥克兰”)。我需要从该过程中获得的是基于给定时区的当地时间的 UTC 时间。
有人可以帮忙吗?
我使用的是 8.3 版
这在手册中有介绍,但如何实际使用日期/时间并不总是很明显。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
根据参数时区,然后另一个将其转换timestamp
为 UTC 时间。
不幸的是,由于 SQL 规范为 定义的(IMO 疯狂)方式AT TIME ZONE
,TIME
您不能对TIME
. 您必须改为操作TimeZone
变量:
SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';
这仍然给你一个timetz
not a time
。因此其显示值随timezone
设置而变化。