6 个版本
0.3.1 | 2024年5月2日 |
---|---|
0.3.0 | 2020年6月10日 |
0.2.1 | 2019年12月21日 |
0.2.0 | 2018年7月5日 |
0.1.0 | 2017年2月11日 |
#16 in 日期和时间
1,728,747 每月下载量
在 725 个 Crates 中使用 (8 直接)
99KB
2K SLoC
parse-zoneinfo
Rust 库,用于读取包含 时区信息数据库 的文本文件,该数据库记录了来自多个来源的全球时区和偏移量变化。
时区信息数据库以两种格式之一分发:一种是以每个大陆一个文件的方式分发的原始文本格式,另一种是以每个时区一个文件的方式分发的编译二进制格式。此包处理文本格式。
该数据库本身由 IANA 维护。更多信息,请参阅 IANA 时区数据库页面。您还可以在 tz 仓库 中找到文本文件。
parse-zoneinfo 是 Benjamin Sago 的 zoneinfo_parse
的分支(现已不再维护)。它由 chrono-tz
使用。
Rust 版本要求
最低支持的 Rust 版本 (MSRV) 目前是 Rust 1.57.0。
使用方法
时区信息文件包含 Zone
、Rule
和 Link
信息。每种类型的行都形成 line::Line
枚举中的一个变体。
要开始使用,以下是一些代表 Europe/Madrid
时区时间的几行示例
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Madrid -0:14:44 - LMT 1901 Jan 1 0:00u
0:00 Spain WE%sT 1940 Mar 16 23:00
1:00 Spain CE%sT 1979
1:00 EU CE%sT
第一行是注释。第二行以 Zone
开头,因此我们知道
解析这五行将返回以下五个结果
- 注释行,因为该行不包含任何信息(但也不是严格意义上的无效)。
- 第一个
Zone
条目的line::Line::Zone
。这包含一个Zone
结构体,其中包含区域名称。其他所有字段都存储在ZoneInfo
结构体中。 - 下一个条目的
line::Line::Continuation
。这与上面的行不同,因为它不包含名称字段;它只在ZoneInfo
结构体中包含信息。 - 第四行包含与第三行相同类型的数据。
- 第五行也是如此。
规则定义的行看起来像这样
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Spain 1918 only - Apr 15 23:00 1:00 S
Rule Spain 1918 1919 - Oct 6 24:00s 0 -
Rule Spain 1919 only - Apr 6 23:00 1:00 S
Rule Spain 1924 only - Apr 16 23:00 1:00 S
Rule Spain 1924 only - Oct 4 24:00s 0 -
所有这些行都遵循相同的模式:一个包含Rule
结构体的line::Line::Rule
,该结构体为数据的每一列都有一个字段。
最后,有一些行将一个区域链接到另一个区域的名称
# Link TARGET LINK-NAME #= TARGET1
link Australia/Sydney Australia/ACT #= Australia/Canberra
Link
结构体简单地包含现有和新的时区的名称。
解释
一旦解析了输入行,就必须对它们进行解释以形成时区数据表。
完成此操作的最简单方法是使用TableBuilder
。您可以向构建器添加各种行,一旦检测到错误(例如重复或缺失条目),它就会抛出错误。当所有行都输入到构建器中时,您可以使用build
方法生成一个包含规则、区域和链接行字段的Table
。
示例程序
此crate的example
文件夹包含一个基本的解析器示例。
parse-zoneinfo
用于生成chrono-tz
的数据。有关其使用的完整示例,请参阅chrono-tz-build
。
依赖关系
~2.7–4MB
~65K SLoC