Nodejs 中的 IANA 时区数据是嵌入到 Node.js 代码中还是从操作系统获取数据?
似乎它有自己的版本,如process.versions返回时区版本,如此处所述。如果是这样,我是否需要安装新的 Node.js 版本来更新时区数据,或者还有其他方法吗?
Node.js 从 ICU 库(又名International Components for Unicode)获取时区数据,该库还提供API 工件来获取时区数据。通常,Node.js 和 ICU 库都不会从操作系统查询外部时区文件。ICU 库使用自己的一组数据文件,包括在构建时收集的IANA 时区数据。除此之外,请注意,tz提供的属性process.versions是指作为 ICU 库一部分的时区数据部分。我稍后会再谈这个。
根据您使用的 Node.js 发行版,可能会应用不同的构建选项,如 Node.js 文档“国际化支持”部分中所述:
“small-icu”:静态绑定 ICU 库以及编译为可执行文件的 ICU 数据的子集。显然,“small-icu”是 Nodejs.org 提供的 Node.js 发行版的常用构建选项(至少对于 Linux 而言)。但是,可以使用从文件加载的 ICU 数据存档覆盖内置数据(请参阅文档,“在运行时提供 Icu 数据”部分)。存在各种 NPM 包来下载存档,例如 node-icu 和 full-icu)。
“full-icu”:与“small-icu”相同,但将完整的 ICU 数据集编译到可执行文件中(这会产生相当大的可执行文件)。
“system-icu”:ICU 库与 Node.js 可执行文件动态绑定,需要作为 Node.js 安装的先决条件进行安装。因此,该库可以独立于 Node.js 安装进行更新。
“none”:ICU库完全不绑定。因此没有可用的时区数据。
一般来说,应该注意的是 ICU 数据存档的更新频率低于 IANA 时区数据。因此,即使您始终安装最新的 Node.js LTS 版本,您也可能必须处理 Node.js 中过时的时区信息。这是由tz属性值指示的2018e,该值指示相当旧的时区数据版本。当前 IANA 时区数据的日期为 2019 年 3 月。对于大多数应用程序来说,这应该没问题,但如果您需要最高精度,则需要寻找其他选项:
moment-timezone或
TimezoneComplete,其中包含自己的时区编译。后者似乎很有趣,因为tzdata包含时区数据集的从属包经常更新。然而,库方法的一个缺点是,您被迫使用库提供的特定 API,而不是“标准”Javascript/Node.js API。这可能会出现问题,特别是如果您有一个大型代码库来维护处理日期/时间对象的库的代码库。| 归档时间: |
|
| 查看次数: |
1966 次 |
| 最近记录: |