我需要將 2021-10-03 15:10:00.0 轉換為 2021-10-03T15:10:00-04:00
我試過。
from_utc_timestamp(from_unixtime(unix_timestamp('2021-10-03 15:10:00.0', "yyyy-MM-dd HH:mm:ss.S"),"yyyy-MM-dd'T'HH:mm:ssXXX"),"America/New_York")
我得到了空值
任何建議請
uj5u.com熱心網友回復:
from_utc_timestamp 可以接受時間戳或兼容字串 (
yyyy-MM-dd HH:mm:ss.S) 或 bigint,而不是這樣:"yyyy-MM-dd'T'HH:mm:ssXXX"Hive 時間戳是無時區的。一旦您從 UTC 轉換為 America/NY,時區資訊就會丟失,只有您知道它在哪個時區,轉換時間戳已經不可能從中匯出時區。
您可以與時區連接,這樣的轉換會回傳您需要的內容,但它僅適用于特定日期。十二月 -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
考慮到 America/New_York 的夏令時,它應該可以在不同的時間戳下正常作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387413.html
上一篇:左外連接先聚合
下一篇:sql中的最大頻率
