#时区 #纬度 #经度 #查找器 #时间 #转换 #名称

程序+库 tzf-rs

快速将经纬度转换为时区名称

18 个版本

0.4.8 2024年4月12日
0.4.7 2024年3月16日
0.4.5 2023年12月29日
0.4.4 2023年8月19日
0.1.3 2022年11月28日

#31 in 地理空间

Download history 1192/week @ 2024-04-26 837/week @ 2024-05-03 1112/week @ 2024-05-10 1253/week @ 2024-05-17 1005/week @ 2024-05-24 1091/week @ 2024-05-31 1172/week @ 2024-06-07 999/week @ 2024-06-14 939/week @ 2024-06-21 1022/week @ 2024-06-28 930/week @ 2024-07-05 1048/week @ 2024-07-12 1051/week @ 2024-07-19 1196/week @ 2024-07-26 995/week @ 2024-08-02 636/week @ 2024-08-09

4,069 每月下载次数
4 crates 中使用

MIT 许可证

155KB
387

tzf-rs: Rust 的快速时区查找器。 Rust Documentation

Time zone map of the world

[!NOTE]

此包使用简化的形状数据,因此在大约边界处可能不完全准确。

构建选项

默认情况下,会构建二进制文件。如果您不需要,可以省略默认功能并按照以下方式构建

cargo build --no-default-features

或者以以下方式添加

cargo add tzf-rs --no-default-features

最佳实践

初始化 tzf-rs 的 Finder/FuzzyFinder/DefaultFinder 比较昂贵,因此请考虑重用实例或将其中一个创建为全局变量。以下是一个全局变量的示例

use lazy_static::lazy_static;
use tzf_rs::DefaultFinder;

lazy_static! {
    static ref FINDER: DefaultFinder = DefaultFinder::new();
}

fn main() {
    print!("{:?}\n", FINDER.get_tz_name(116.3883, 39.9289));
    print!("{:?}\n", FINDER.get_tz_names(116.3883, 39.9289));
}

对于重用,racemap/rust-tz-service 提供了一个很好的例子。

这里可以使用 Redis 协议演示: ringsaturn/redizone

性能

tzf-rs 包旨在用于高性能的地理空间查询服务,如天气预报 API。大多数查询可以在非常短的时间内返回,平均大约 3,000 纳秒(比 Go 仓库 tzf 慢 1,000 纳秒。我将继续改进这一点 - 您可以在此 跟踪进度)。

以下是一些改进性能所做的工作

  1. 使用预索引处理大多数查询大约需要 1000 纳秒。
  2. 使用精细调优的射线投射算法包 ringsaturn/geometry-rs 来验证多边形是否包含一个点。

这就是全部。tzf-rs 中没有黑魔法。

以下是全球城市(约14K个)的基准测试运行,平均每个查询约3,000纳秒。

test benches_default::bench_default_finder_random_city ... bench:       2,870 ns/iter (+/- 182)
标准结果 图片
PDF
回归

您可以从 GitHub Actions 日志 中查看更多详细信息。

参考文献

我写了一篇关于 tzf 的历史、它的 Rust 端口以及其 Python 绑定的文章;您可以在 这里 查看。

绑定

许可证

本项目采用 MIT 许可证。数据采用 ODbL 许可证,与 evansiroky/timezone-boundary-builder 相同。

依赖关系

~14MB
~69K SLoC