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

如何获取时区别名对应的canonical标准时区名称?

时区别名转canonical名称实现方案

实现思路

IANA tz数据库的别名和标准名称的映射关系存放在官方的backward数据文件中,你可以通过两种方式实现需求:

方案1:使用现有tzdb封装库(推荐)

直接使用已经打包好IANA tz全量数据的@vvo/tzdb库,无需自己维护映射数据,库会随官方tz数据库定期更新。
安装依赖:

npm install @vvo/tzdb

函数实现:

import { getTimeZones } from '@vvo/tzdb';

// 初始化全局映射表,仅需执行一次
const tzAliasMap = {};
getTimeZones().forEach(tzItem => {
  // 标准名称自身映射
  tzAliasMap[tzItem.name] = tzItem.name;
  // 别名绑定到对应标准名称
  tzItem.alternativeNames.forEach(alias => {
    tzAliasMap[alias] = tzItem.name;
  });
});

function getCanonicalName(name) {
  return tzAliasMap[name] ?? null;
}

// 测试用例
getCanonicalName('Africa/Accra'); // 返回 'Africa/Abidjan'

方案2:无额外依赖实现

如果不想引入第三方依赖,可以手动从IANA tz数据库的backward文件中提取所有别名映射,构建静态映射表:

// 此处仅为示例,完整映射表需自行提取全量数据
const tzAliasMap = {
  "Africa/Accra": "Africa/Abidjan",
  "Africa/Abidjan": "Africa/Abidjan",
  // 其余别名映射...
};

function getCanonicalName(name) {
  return tzAliasMap[name] ?? null;
}

补充说明

你调研的moment-timezone和luxon仅提供时区时间转换能力,没有对外暴露别名到标准名称的映射接口,确实无法直接用来实现该需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:06:04