国家与地区代码相关工具合集

国家代码工具合集:区分 ISO 3166-1 alpha-2、alpha-3 与数字码三种表示,说明域名 ccTLD、电话区号与语言代码并非同一体系,并给出日期格式化中因时区导致差一天的根因与修复方法,附数值换算与文本处理工具入口。适合处理多语言数据与区域化展示。

「中国的国家代码」这个问题至少有三个答案,取决于你在哪个体系里查。

常见方案对照

体系示例(中国)主要用途
ISO 3166-1 alpha-2CN域名、多数系统标识
ISO 3166-1 alpha-3CHN联合国、部分航空与运输
ISO 3166-1 数字码156统计与旧系统
ccTLD 域名.cn国家顶级域名
国际电话区号+86电话号码
语言代码zhISO 639 语言标识
完整 localezh-CN语言 + 地区组合
未分配国家码CN(根区)见 IANA 根区记录

边界条件

  • ccTLD 与 ISO 国家码并非一一对应:.uk 是英国的 ccTLD,但 ISO alpha-2 是 GB。
  • 数字电话区号不等于国家码:+7 是俄罗斯与哈萨克斯坦共用。
  • 语言代码(zh)与地区码(CN)组合成 zh-CN 才是完整的 locale 标识。
  • 同一时区内夏令时切换会让 UTC 与本地时间的偏移在一年中变化两次。

常见坑

  • 把 +86 当成国家码存储,与 ISO 的 CN 混在一张表里。
  • 用 ISO alpha-2 匹配英国,实际值是 GB 而非 UK,写成 UK 全部匹配失败。
  • 把 UTC 时间戳当本地时间格式化,导致日期差一天。
  • 用日期字符串直接加减天数绕过时区,在跨夏令时的时间段算出错误日期。

相关工具

常见问题

ISO 3166 的 alpha-2 和 alpha-3 有什么区别?

**同一国家的两种长度写法。** alpha-2 是两字母代码(CN、US、DE),用于域名与多数系统标识;alpha-3 是三字母代码(CHN、USA、DEU),用于需要更长标识位的场合。部分系统用的是三字母码,而 ISO 3166-1 自己的数字码是三位纯数字。API 设计与数据库存储时要明确用哪一种,混用会在对接时出错。

为什么日期格式化会差一天?

几乎都因为**时区处理**。同一个 UTC 时间戳在北京时间是 6 月 1 日 08:00,在美国东部是前一天的 20:00——**日期差一天**。根源是把 UTC 时间戳当作本地时间处理。正确做法是:**存储用 UTC 或带时区的 ISO 8601 字符串,显示时才转成目标时区**。永远不要用日期字符串直接加减天数,那会绕过时区与夏令时规则。