我正在尝试使用 ECMA-402 国际 API 来获取非本地时区的时区缩写(服务器时区是 UTC)。我知道其他方法可以得到这个。我试图了解国际 API 的局限性并充分利用它。我可以获取完整的时区名称并自己进行映射,但由于缩写位于 IANA tz 数据库中,并且国际 API 应该基于此,因此似乎应该能够生成它们,这让我觉得我是做错事。
我有以下代码:
const fmt = new Intl.DateTimeFormat('en', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: 'numeric',
fractionalSecondDigits: 3,
hour12: false,
weekday: 'short',
timeZoneName: 'short',
timeZone: 'Pacific/Auckland'
});
const now = new Date();
console.log(fmt.format(now));
const fmt2 = new Intl.DateTimeFormat('en', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: 'numeric',
fractionalSecondDigits: 3,
hour12: false,
weekday: 'short',
timeZoneName: 'short',
timeZone: 'America/Los_Angeles'
});
console.log(fmt2.format(now));
在节点 12.16.1 和 Firefox 73.0.1 中,这都会产生如下输出:
Wed, 04/08/2020, 18:14:50 GMT+12
Tue, 04/07/2020, 23:14:50 PDT
America/Los_Angeles 时区按预期获取时区缩写,但 Pacific/Auckland 时区则不然。 IANA tz 数据库包含 Pacific/Auckland 的缩写,操作系统 (Debian Linux) 生成它们。
我可以采取什么不同的措施来从 International API 获取缩写吗?或者这只是最先进的技术?
我注意到 luxon 和 date-fns-tz 都依赖于国际 API,并且它们也无法生成 Pacific/Auckland 的缩写。