FROM_UTC_TIMESTAMP函数用于将一个UTC时区的时间戳转换成一个指定时区的时间戳,即将一个UTC时区的时间戳按照指定的时区显示。
注意事项
为确保时区处理的清晰性与一致性,推荐使用TO_TIMESTAMP_NTZ函数。避免由于FROM_UTC_TIMESTAMP函数在处理时区时导致的返回结果不符合预期。
命令格式
TIMESTAMP FROM_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类型指定时区的时间戳。返回规则如下:
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 FROM_UTC_TIMESTAMP(0, 'Asia/Shanghai') AS TIMESTAMP1 ,FROM_UTC_TIMESTAMP(1230000,'Etc/GMT') AS TIMESTAMP2 ,FROM_UTC_TIMESTAMP(-1230000,'Etc/GMT') AS TIMESTAMP3; -- 返回: +---------------------+---------------------+---------------------+ | timestamp1 | timestamp2 | timestamp3 | +---------------------+---------------------+---------------------+ | 1970-01-01 16: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 FROM_UTC_TIMESTAMP(0, 'Asia/Shanghai') AS TIMESTAMP1 ,FROM_UTC_TIMESTAMP(1230000,'Etc/GMT') AS TIMESTAMP2 ,FROM_UTC_TIMESTAMP(-1230000,'Etc/GMT') AS TIMESTAMP3; -- 返回: +---------------------+---------------------+---------------------+ | timestamp1 | timestamp2 | timestamp3 | +---------------------+---------------------+---------------------+ | 1970-01-01 08: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-31 09:00:00 SELECT FROM_UTC_TIMESTAMP('2025-08-31', 'Asia/Seoul'); -- 返回 2025-03-05 23:30:15 SELECT FROM_UTC_TIMESTAMP('2025-03-05 15:30:15','Asia/Shanghai'); -- 返回 2025-03-05 08:00:00.123456789 SELECT FROM_UTC_TIMESTAMP('2025-03-05 00:00:00.123456789','Asia/Shanghai'); -- 返回 2025-03-04 16:00:00 SELECT FROM_UTC_TIMESTAMP(DATETIME '2025-03-05 00:00:00','PST'); -- 返回 2025-03-06 00:30:15.123 SELECT FROM_UTC_TIMESTAMP(TIMESTAMP '2025-03-05 15:30:15.123','Asia/Seoul'); -- 返回 2025-03-05 23:30:15.123 SELECT FROM_UTC_TIMESTAMP(TIMESTAMP_NTZ '2025-03-05 15:30:15.123','Asia/Shanghai');
若使用MaxCompute客户端执行,当use_instance_tunnel为true时,可能出现 odpscmd与logview的两边返回结果的屏显不一致的情况,结果请以logview里的result为准。
相关函数
FROM_UTC_TIMESTAMP函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数。