TO_UTC_TIMESTAMP 函数用于将时间戳从指定时区转换为UTC时区时间,即将一个指定时区的时间戳按照UTC的时区显示。
注意事项
为确保时区处理的清晰性与一致性,推荐使用TO_TIMESTAMP_NTZ函数。避免由于TO_UTC_TIMESTAMP函数在处理时区时导致的返回结果不符合预期。
命令格式
TIMESTAMP TO_UTC_TIMESTAMP (BIGINT|STRING|DATETIME|TIMESTAMP|TIMESTAMP_NTZ <timestamp>, STRING <time_zone>)参数说明
timestamp:必填。待转换的时间戳。支持BIGINT、STRING、DATETIME、TIMESTAMP或TIMESTAMP_NTZ类型。
如果输入为STRING类型,日期格式需包含
yyyy-mm-dd或yyyy-mm-dd hh:mi:ss。如果输入为BIGINT类型的毫秒值,系统会以 1970-01-01 00:00:00 UTC 为起点加上毫秒值,再根据当前Session/Project时区设置进行时区偏移,作为输入时间戳。
time_zone:必填。用于指定时区。STRING类型。
返回值说明
返回TIMESTAMP类型的 UTC 时间戳。返回规则如下:
timestamp非BIGINT、STRING、DATETIME、TIMESTAMP或TIMESTAMP_NTZ类型,返回报错。
timestamp为不符合格式要求的STRING类型,返回NULL。
timestamp为NULL,返回报错。
time_zone为NULL,返回NULL。
使用示例
示例1:当输入参数为BIGINT时,系统会以 1970-01-01 00:00:00 UTC 为起点加上毫秒值,再根据当前Session/Project时区设置进行时区偏移,作为输入时间戳。
-- 设置Session/Project时区为Asia/Shanghai SET odps.sql.timezone = Asia/Shanghai; SELECT TO_UTC_TIMESTAMP(0, 'Asia/Shanghai') AS TIMESTAMP1 ,TO_UTC_TIMESTAMP(1230000,'Etc/GMT') AS TIMESTAMP2 ,TO_UTC_TIMESTAMP(-1230000,'Etc/GMT') AS TIMESTAMP3; -- 返回: +---------------------+---------------------+---------------------+ | timestamp1 | timestamp2 | timestamp3 | +---------------------+---------------------+---------------------+ | 1970-01-01 00:00:00 | 1970-01-01 08:20:30 | 1970-01-01 07:39:30 | +---------------------+---------------------+---------------------+ -- 设置Session/Project时区为Etc/GMT SET odps.sql.timezone = Etc/GMT; SELECT TO_UTC_TIMESTAMP(0, 'Asia/Shanghai') AS TIMESTAMP1 ,TO_UTC_TIMESTAMP(1230000,'Etc/GMT') AS TIMESTAMP2 ,TO_UTC_TIMESTAMP(-1230000,'Etc/GMT') AS TIMESTAMP3; -- 返回: +---------------------+---------------------+---------------------+ | timestamp1 | timestamp2 | timestamp3 | +---------------------+---------------------+---------------------+ | 1969-12-31 16:00:00 | 1970-01-01 00:20:30 | 1969-12-31 23:39:30 | +---------------------+---------------------+---------------------+示例2:当输入参数为其他类型时,函数将时间戳从指定时区转换为UTC时区时间戳并返回,此时输出与输出时间戳均与Session/Project时区设置无关。
-- 设置Session/Project时区值,对输入与输出时间戳无影响 SET odps.sql.timezone = Asia/Shanghai; -- 返回 2025-08-30 15:00:00 SELECT TO_UTC_TIMESTAMP('2025-08-31', 'Asia/Seoul'); -- 返回 2025-03-05 07:30:15 SELECT TO_UTC_TIMESTAMP('2025-03-05 15:30:15','Asia/Shanghai'); -- 返回 2025-03-04 16:00:00.123456789 SELECT TO_UTC_TIMESTAMP('2025-03-05 00:00:00.123456789','Asia/Shanghai'); -- 返回 2025-03-05 08:00:00 SELECT TO_UTC_TIMESTAMP(DATETIME '2025-03-05 00:00:00','PST'); -- 返回 2025-03-05 06:30:15.123 SELECT TO_UTC_TIMESTAMP(TIMESTAMP '2025-03-05 15:30:15.123','Asia/Seoul'); -- 返回 2025-03-05 07:30:15.123 SELECT TO_UTC_TIMESTAMP(TIMESTAMP_NTZ '2025-03-05 15:30:15.123','Asia/Shanghai');
若使用MaxCompute客户端执行,当use_instance_tunnel为true时,可能出现 odpscmd与logview的两边返回结果的屏显不一致的情况,结果请以logview里的result为准。
相关函数
TO_UTC_TIMESTAMP函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数。