gpt4 book ai didi

node.js - Node.js 从哪里获取时区数据?

转载 作者:行者123 更新时间:2023-12-02 03:18:22 27 4
gpt4 key购买 nike

nodejs 中的 IANA 时区数据是嵌入 Node.js 代码中还是从操作系统获取数据?

它似乎有自己的版本,因为 process.versions 返回时区版本 as stated here 。如果是这样,我需要安装新的 Node.js 版本来更新时区数据还是有其他方法?

最佳答案

Node.js 从 ICU 库(又名 Unicode 国际组件)获取时区数据,该库还提供 API artefacts to obtain timezone data 。通常,Node.js 和 ICU 库都不会从操作系统查询外部时区文件。 ICU 库使用自己的一组数据文件,包括 IANA timezone data这是在构建时收集的。除此之外,process.versions 提供的 tz 属性引用时区数据部分作为 ICU 库的一部分。我稍后会再讨论这个问题。

根据 Node.js 发行版,您使用不同的构建选项,可能会应用 Node.js 文档“Internationalization Support”部分中所述的内容:

  • “small-icu”:静态绑定(bind) ICU 库以及编译为可执行文件的 ICU 数据的子集。显然,“small-icu”是 Nodejs.org 提供的 Node.js 发行版的常用构建选项(至少对于 Linux 而言)。但是,可以使用从文件加载的 ICU 数据存档覆盖内置数据(请参阅文档“Providing Icu Data at Runtime”部分)。存在各种 NPM 包来下载存档,例如 node-icu 和 full-icu)。

  • “full-icu”:与“small-icu”相同,但将完整的 ICU 数据集编译到可执行文件中(这会产生相当大的可执行文件)。

  • “system-icu”:ICU 库与 Node.js 可执行文件动态绑定(bind),需要作为 Node.js 安装的先决条件进行安装。因此,该库可以独立于 Node.js 安装进行更新。

  • “none”:ICU 库根本不绑定(bind)。因此没有可用的时区数据。

一般需要注意ICU data archive is updated less frequently than the IANA timezone data 。因此,即使您始终安装最新的 Node.js LTS 版本,您也可能必须处理 Node.js 中过时的时区信息。这是由 tz 属性值 2018e 指示的,它指示相当旧的时区数据版本。当前 IANA 时区数据的日期为 2019 年 3 月。对于大多数应用程序来说,这应该没问题,但如果您需要最高精度,则需要寻找其他选项:

  • 获取使用“system-icu”构建的 Node.js 发行版(或者很可能建立你自己的)可能是一个选择,但是,我不确定你真的可以动态地将 Node.js 与较新版本的库绑定(bind)在一起运行。对此可能存在限制。
  • 构建您自己的custom ICU data archive或许是另一种选择,但如果您从未处理过,那么它似乎相当复杂之前的ICU图书馆。
  • 另一个选择是使用 Node.js 库,例如 moment-timezone或者 TimezoneComplete其中包括他们自己的时区汇编。这后者似乎很有趣,因为包含时区数据集的下属 tzdata 包已更新频繁地。然而,图书馆方法的一个缺点是,你被迫使用库提供的特定 API 而不是“标准”Javascript/Node.js API。这可能会出现问题,特别是如果您有大型代码库,用于维护处理日期/时间的库的代码库对象。

关于node.js - Node.js 从哪里获取时区数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55477931/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com