nodejs中的IANA时区数据是否嵌入在Node.js代码中,还是从操作系统中获取数据?
似乎它具有自己的版本,因为process.versions
返回here所述的时区版本。如果是这样,我是否需要安装新的Node.js版本以更新时区数据,还是有其他方法?
答案 0 :(得分:1)
Node.js从ICU库(又名 Unicode国际组件)获取时区数据,该库还提供API artefacts to obtain timezone data。通常,Node.js和ICU库都不从操作系统查询外部时区文件。 ICU库使用其自己的数据文件集,包括在构建时收集的IANA timezone data。除此之外,请注意,tz
提供的process.versions
属性将时区数据部分引用为ICU库的一部分。我待会儿再讲。
根据Node.js发行版的不同,您可以使用不同的构建选项,如Node.js文档“ Internationalization Support”一节所述:
“ small-icu”: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可执行文件动态绑定,需要作为Node.js安装的先决条件进行安装。因此,可以独立于node.js安装来更新该库。
“无”:根本没有绑定ICU库。因此没有可用的时区数据。
通常应注意ICU data archive is updated less frequently than the IANA timezone data。因此,即使您始终安装最新的Node.js LTS版本,也可能必须处理Node.js中过时的时区信息。这由tz
属性值2018e
表示,它表示时区数据的版本很旧。当前的IANA时区数据日期为2019年3月。对于大多数应用而言,这应该没问题,但是如果您需要最高的准确性,则需要寻找其他选择:
moment-timezone
或
TimezoneComplete
,其中包括他们自己的时区汇编。的
后者似乎很有趣,因为
包含时区数据集的下级tzdata
包已更新
经常。但是,库方法的缺点是,您被迫
使用库提供的特定API而非“标准”
Javascript / Node.js API。尤其是如果您有一个
大型代码库,用于维护处理日期/时间的库上的代码库
对象。