我想把我的时间戳显示为2022-10-28 00:00:26
但是,使用我当前的代码
FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S %Z', CURRENT_TIMESTAMP(), 'America/Los_Angeles') AS timezoned我收到2022-10-28 00:00:26 UTC-7作为输出
有没有办法使UTC-7看起来像BigQuery中的默认时区缩写(如EDT或EST )?
发布于 2022-10-28 09:48:35
由于有更多的25个时区 (例如,UTC+9映射到JST、KST、TNK、.),所以映射时区不是many-to-one mapping。因此,我认为我们需要一个预定义的字典(或映射)来将数字映射到一个预定义的字符串。
一种可能的方法是使用数组查找索引的字符串。
BigQuery脚本
DECLARE TZ_DICT ARRAY<STRING>;
SET TZ_DICT = ARRAY<STRING>[
'NUT', 'HST', 'HDT', 'AKDT','PDT', 'CST', 'CDT', 'EDT', 'ART', 'WGST',
'CVT', 'GMT', 'BST', 'CEST', 'MSK', 'GST', 'UZT', 'BST', 'WIB', 'CST',
'JST', 'AEST', 'AEDT', 'ANAT'
];
WITH
time_zone_data AS (
SELECT FORMAT_TIMESTAMP('%Z', CURRENT_TIMESTAMP(), 'Asia/Seoul') AS time_zone_str,
UNION ALL SELECT FORMAT_TIMESTAMP('%Z', CURRENT_TIMESTAMP(), 'America/Los_Angeles') AS time_zone_str,
UNION ALL SELECT FORMAT_TIMESTAMP('%Z', CURRENT_TIMESTAMP(), 'Pacific/Guam') AS time_zone_str,
UNION ALL SELECT FORMAT_TIMESTAMP('%Z', CURRENT_TIMESTAMP(), 'America/Puerto_Rico') AS time_zone_str,
UNION ALL SELECT FORMAT_TIMESTAMP('%Z', CURRENT_TIMESTAMP(), 'Africa/Bamako') AS time_zone_str,
UNION ALL SELECT FORMAT_TIMESTAMP('%Z', CURRENT_TIMESTAMP(), 'Pacific/Niue') AS time_zone_str,
UNION ALL SELECT FORMAT_TIMESTAMP('%Z', CURRENT_TIMESTAMP(), 'Pacific/Norfolk') AS time_zone_str,
),
time_zone_data_processed AS (
SELECT
time_zone_str,
CAST(SUBSTRING(IF(time_zone_str = "UTC", "UTC+0", time_zone_str), 4) AS INT64) + 11 as time_zone_index,
FROM time_zone_data
)
SELECT
time_zone_str,
time_zone_index,
TZ_DICT[OFFSET(time_zone_index)] as time_zone_string,
FROM time_zone_data_processed
;结果

https://stackoverflow.com/questions/74231777
复制相似问题