You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BigQuery中获取EDT/EST等时区缩写而非UTC±X格式?

在BigQuery中显示EDT/EST这类时区缩写的实现方案

BigQuery的FORMAT_TIMESTAMP函数默认用%Z占位符输出的是UTC偏移格式(如UTC-7),而非EDT、EST这类夏令时/标准时的缩写。要实现目标格式,可通过以下两种方式处理:

方法一:自定义时区映射+夏令时判断

创建包含目标时区标准时、夏令时缩写的映射表,结合EXTRACT(DST)函数判断当前时间是否处于夏令时,最终拼接出目标格式:

WITH time_zone_mappings AS (
  SELECT
    'America/New_York' AS tz_id,
    'EST' AS std_abbr,
    'EDT' AS dst_abbr
  UNION ALL
  SELECT
    'America/Los_Angeles' AS tz_id,
    'PST' AS std_abbr,
    'PDT' AS dst_abbr
  -- 按需添加其他时区的映射关系
)
SELECT
  CONCAT(
    FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', CURRENT_TIMESTAMP(), t.tz_id),
    ' ',
    CASE
      WHEN EXTRACT(DST FROM CURRENT_TIMESTAMP() AT TIME ZONE t.tz_id) THEN t.dst_abbr
      ELSE t.std_abbr
    END
  ) AS timezoned
FROM time_zone_mappings t
WHERE t.tz_id = 'America/Los_Angeles';

该方法的核心是通过EXTRACT(DST FROM ...)检测目标时区下当前时间是否启用夏令时,再匹配对应的时区缩写,可靠性高,适合多时区场景扩展。

方法二:利用预定义格式字符串截取缩写(仅限特定场景)

借助%c格式符输出包含时区缩写的完整时间字符串,再通过字符串截取提取缩写。这种方式依赖BigQuery对%c格式的输出规则,稳定性略差:

SELECT
  CONCAT(
    FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', CURRENT_TIMESTAMP(), 'America/Los_Angeles'),
    ' ',
    SUBSTR(PARSE_TIMESTAMP('%c', CURRENT_TIMESTAMP(), 'America/Los_Angeles'), -3)
  ) AS timezoned;

注:%c格式会输出类似Fri Oct 28 00:00:26 2022 PDT的字符串,截取最后3位即可得到时区缩写,但部分时区可能存在缩写歧义,不推荐作为通用解决方案。


内容的提问来源于stack exchange,提问作者Dmytro Pavlov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:21:27