Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

CONVERT_TIMEZONE 函数

CONVERT_TIMEZONE 将时间戳从一个时区转换为另一个时区。

语法

Copy
CONVERT_TIMEZONE ( ['source_timezone',] 'target_timezone', 'timestamp')

参数

source_timezone

(可选)当前时间戳的时区。默认值为 UTC。有关更多信息,请参阅 时区使用说明

target_timezone

新时间戳的时区。有关更多信息,请参阅 时区使用说明

timestamp

时间戳列,或隐式转换为时间戳的表达式。

返回类型

TIMESTAMP

时区使用说明

可指定 source_timezonetarget_timezone 作为时区名称(如“Africa/Kampala”或“Singapore”)或作为时区缩写(如“UTC”或“PDT”)。

要查看支持的时区名称的列表,请执行以下命令。

Copy
select pg_timezone_names();

要查看支持的时区缩写的列表,请执行以下命令。

Copy
select pg_timezone_abbrevs();

使用时区名称

如果您使用时区名称指定时区,则 CONVERT_TIMEZONE 将自动针对夏令时 (DST) 或任何其他本地季节性协议(如夏令时间、标准时间或冬季时间)进行调整,这类协议是根据“timestamp”指定的日期和时间期间的时区实施的。例如,“Europe/London”表示冬季的 UTC 和夏季的 UTC+1。

使用时区缩写

时区缩写表示与 UTC 的固定偏移。如果您使用时区缩写指定时区,则 CONVERT_TIMEZONE 将使用与 UTC 的固定偏移并且不针对任何本地季节性协议进行调整。例如,ADT(大西洋夏令时间)始终表示 UTC-03,甚至在冬季也如此。

使用 POSIX 样式格式

POSIX 样式格式是一种 STDoffsetSTDoffsetDST 形式的时区规格,其中 STD 是时区缩写,offset 是从 UTC 向西的小时数偏移,而 DST 是可选夏令时区缩写。夏令时时间假定为比给定的偏移提前一个小时。

POSIX 式时区格式使用格林威治向西正偏移,与 ISO-8601 约定相反,后者使用格林威治向东正偏移。

以下是 POSIX 式时区的示例:

  • PST8

  • PST8PDT

  • EST5

  • EST5EDT

注意

Amazon Redshift 不验证 POSIX 样式时区规格,因此可能将时区设置为无效值。例如,即使将时区设置成了无效值,以下命令也没有返回错误。

Copy
set timezone to ‘xxx36’;

示例

以下示例将 LISTTIME 列中的时间戳值从默认 UTC 时区转换为 PST 时区。即使该时间戳位于夏令时期间内,它仍将转换为标准时间,因为目标时区已指定为缩写 (PST)。

Copy
select listtime, convert_timezone('PST', listtime) from listing where listid = 16; listtime | convert_timezone --------------------+------------------- 2008-08-24 09:36:12 2008-08-24 01:36:12

以下示例将 LISTTIME 列中的时间戳从默认 UTC 时区转换为美国/太平洋时区。该目标时区使用时区名称且该时间戳位于夏令时期间内,因此该函数返回夏令时间。

Copy
select listtime, convert_timezone('US/Pacific', listtime) from listing where listid = 16; listtime | convert_timezone --------------------+--------------------- 2008-08-24 09:36:12 | 2008-08-24 02:36:12

以下示例将时间戳字符串从 EST 转换为 PST:

Copy
select convert_timezone('EST', 'PST', '20080305 12:25:29'); convert_timezone ------------------- 2008-03-05 09:25:29

以下示例将时间戳转换为美国东部标准时间,因为目标时区使用了时区名称 (America/New_York) 且该时间戳位于该标准时间期间内。

Copy
select convert_timezone('America/New_York', '2013-02-01 08:00:00'); convert_timezone --------------------- 2013-02-01 03:00:00 (1 row)

以下示例将时间戳转换为美国东部夏令时,因为目标时区使用时区名称 (America/New_York) 且该时间戳位于该夏令时间期间内。

Copy
select convert_timezone('America/New_York', '2013-06-01 08:00:00'); convert_timezone --------------------- 2013-06-01 04:00:00 (1 row)

以下示例演示了偏移的使用。

Copy
SELECT CONVERT_TIMEZONE('GMT','NEWZONE +2','2014-05-17 12:00:00') as newzone_plus_2, CONVERT_TIMEZONE('GMT','NEWZONE-2:15','2014-05-17 12:00:00') as newzone_minus_2_15, CONVERT_TIMEZONE('GMT','America/Los_Angeles+2','2014-05-17 12:00:00') as la_plus_2, CONVERT_TIMEZONE('GMT','GMT+2','2014-05-17 12:00:00') as gmt_plus_2; newzone_plus_2 | newzone_minus_2_15 | la_plus_2 | gmt_plus_2 ---------------------+---------------------+---------------------+--------------------- 2014-05-17 10:00:00 | 2014-05-17 14:15:00 | 2014-05-17 10:00:00 | 2014-05-17 10:00:00 (1 row)