4个版本
0.1.3 | 2021年3月21日 |
---|---|
0.1.2 | 2020年5月30日 |
0.1.1 | 2019年12月22日 |
0.1.0 | 2019年4月23日 |
在 日期和时间 类别中排名 156
每月下载 200 次
在 3 个库中使用
41KB
814 行
tzfile
tzfile
是一个使用系统 时区数据库 的 chrono::TimeZone
实现。它可以将 /usr/share/zoneinfo
中的编译(二进制)时区文件解析为 chrono
的时间区对象。
use chrono::{Utc, TimeZone};
use tzfile::Tz;
let tz = Tz::named("America/New_York")?;
let dt1 = Utc.ymd(2019, 3, 10).and_hms(6, 45, 0);
assert_eq!(dt1.with_timezone(&&tz).to_string(), "2019-03-10 01:45:00 EST");
let dt2 = Utc.ymd(2019, 3, 10).and_hms(7, 15, 0);
assert_eq!(dt2.with_timezone(&&tz).to_string(), "2019-03-10 03:15:00 EDT");
tzfile
与 chrono-tz
的比较
tzfile
从操作系统动态加载时区信息,而 chrono-tz
锁定到特定的tz数据库版本,并将解析结果静态嵌入到生成的可执行文件中。
tzfile
的用户可以获得与系统相同的时区配置,并保证与其他非Rust程序具有相同的行为。但是,某些系统不提供完整的tz数据库(例如Windows),这使得程序在多个平台之间不可移植。
性能
UTC到本地时间的转换与 chrono-tz
的性能相当,因为两者都使用相同的数据结构(排序数组)。在反向方向(本地到UTC)中,tzfile
缓存转换表,允许在所有情况下都比 chrono-tz
快。
时区类型 | 亚洲/德黑兰 → UTC | UTC → 亚洲/德黑兰 |
---|---|---|
&tzfile::Tz |
107 ns | 33 ns |
tzfile::RcTz |
125 ns | 38 ns |
tzfile::ArcTz |
156 ns | 48 ns |
chrono_tz::Tz |
227 ns | 43 ns |
注意:解析tz文件的前期成本为16 µs。
限制
由于 chrono
的设计方式,即使tz文件中存在,也会始终忽略闰秒。此外,仅支持格里高利历。
目前,方便函数 Tz::named()
和 Tz::local()
仅在Unix上可用。
尚不支持解析POSIX TZ规则,因此对遥远未来的预测可能不正确。
依赖关系
~1.5MB
~20K SLoC