TIMESTAMP WITH TIME ZONE 值包含年、月、日、小时、分钟、秒、秒的小数部分以及在协调通用时间(Coordinated Universal Time,简称 UTC)前后的分钟数。小数存储到 6 个小数位。
应用程序以字符串形式检索 TIMESTAMP WITH TIME ZONE 值所使用的格式由 timestamp_with_time_zone_format 选项设置控制。例如,根据 timestamp_with_time_zone_format
选项设置的不同,TIMESTAMP WITH TIME ZONE 值 2010/04/01T23:59:59.999999-6:00 可以 2010/04/01 23:59:59 -06:00 或 April 1, 2010 23:59:59.999999 -06:00 形式返回给应用程序。
TIMESTAMP WITH TIME ZONE 值需要 10 个存储字节。
尽管 TIMESTAMP WITH TIME ZONE 数据类型的可接受日期范围与 DATE 类型相同(从 0001 年到 9999 年),但 TIMESTAMP WITH TIME ZONE 日期类型的有用范围是从 1600-02-28 23:59:59
到 7911-01-01 00:00:00。将不保留早于或晚于此范围的 TIMESTAMP WITH TIME ZONE 值的小时和分钟部分。
不可将 TIMESTAMP WITH TIME ZONE 用于计算列或实例化视图中,因为控制 time_zone_adjustment 选项的值在基于位置和年份时间的连接之间有所差异。
当两个 TIMESTAMP WITH TIME ZONE 值以 UTC 表示相同时刻时,则认为它们是相同的,无论是否应用了 TIME ZONE 偏移。例如,因为认为结果是相同的,所以下列语句返回 Yes:
IF CAST('2009-07-15 08:00:00 -08:00' AS TIMESTAMP WITH TIME ZONE) =
CAST('2009-07-15 11:00:00 -05:00' AS TIMESTAMP WITH TIME ZONE) THEN
SELECT 'Yes'
ELSE
SELECT 'No'
END IF;
如果省略 TIMESTAMP WITH TIME ZONE 值的时区偏移,则其缺省为客户端的当前 UTC 偏移,无论时间戳是否以标准时间或夏令时表示日期和时间。例如,如果位于东部标准时区的客户端在夏令时生效时执行以下语句,则会返回适用于大西洋标准时区(从
UTC 减去 4 小时)的时间戳。
SELECT CAST('2009/01/30 12:34:55' AS TIMESTAMP WITH TIME ZONE);
将 TIMESTAMP WITH TIME ZONE 与其它数据类型进行比较
不建议使用不具有时区的时间戳比较 TIMESTAMP WITH TIME ZONE 值,因为客户端的缺省时区偏移会因客户端的地理位置和年份时间而不同。
转换到 TIMESTAMP WITH TIME ZONE 或从 TIMESTAMP WITH TIME ZONE 转换
将 TIMESTAMP 值转换为 TIMESTAMP WITH TIME ZONE 时,该连接的 time_zone_adjustment 设置用于结果中的时区偏移。也就是说,对于该连接而言,将该值视为本地值。将 TIMESTAMP WITH
TIME ZONE 值转换为 TIMESTAMP 时,将放弃该偏移。仅支持转换到字符串、日期或日期时间类型,或者从这些类型转换。