-
from_utc_timestamp 可以接受时间戳或兼容字符串 (yyyy-MM-dd HH:mm:ss.S),或 bigint,而不是这个:"yyyy-MM-dd'T'HH:mm:ssXXX"
-
Hive 时间戳是无时区的。一旦你从 UTC 转换为 America/NY,时区信息就会丢失,只有你知道它在哪个时区,转换时间戳已经不可能从中得出时区。
-
您可以与时区连接,这样的转换会返回您需要的内容,但它仅适用于特定日期。 12 月 -05:00 时区应使用而不是 +04:00:
date_format(from_utc_timestamp('2021-10-03 15:10:00.0',"America/New_York"),"yyyy-MM-dd'T'HH:mm:ss+04:00") --This is wrong!!!
From_utc_timestamp 支持夏令时。它可以是 -05:00 或 -04:00,具体取决于日期。
考虑这个例子,第一个返回 5,第二个返回 4:
select (unix_timestamp("2020-01-01 12:00:00.0")-unix_timestamp(from_utc_timestamp("2020-01-01 12:00:00.0","America/New_York")))/60/60
select (unix_timestamp("2020-10-19 12:00:00.0")-unix_timestamp(from_utc_timestamp("2020-10-19 12:00:00.0","America/New_York")))/60/60
因此,您可以获取与 America/New_York 对应的相同时间戳的当前时区,并将其与转换后的时间戳连接:
select concat(date_format(from_utc_timestamp('2021-10-03 15:10:00.0',"America/New_York"),"yyyy-MM-dd'T'HH:mm:ss"),'+0',
--get hrs shift
(unix_timestamp("2021-10-03 15:10:00.0")-unix_timestamp(from_utc_timestamp("2021-10-03 15:10:00.0","America/New_York"))) div 3600,':00')
结果:
2021-10-03T11:10:00+04:00
考虑到美国/纽约的夏令时,它应该可以在不同的时间戳下正常工作。