跳至内容
常见问题

常见问题

坐标顺序是什么?

所有 tzf 实现均采用 (经度,纬度) 顺序,与 GeoJSON 和大多数地理 API 一致。请注意,部分系统(如 Google Maps URL、许多地理教材)使用 (纬度,经度) 顺序,传递数值前请仔细确认。

tzf 是 100% 准确的吗?

默认查询器在时区边界附近无法保证与完整精度数据集一致。它使用 epsilon 为 0.001 度的拓扑感知 Douglas-Peucker 简化算法,将边界位移限制在约 111 米内。

与完整精度的 2026c 数据集对比后,测量结果记录在 BORDER_CHANGE.md 中:

指标结果
经认证的最大边界位移111.2 米,容差 1.0 米
位移超过 100 米的边界长度占比0.41%
位移超过 500 米的边界长度占比0%
误分配区域总面积16,828 平方公里,约占地球面积的 0.003%
真实边界 100 米内的误分配面积占比92.8%

只有位于时区边界约 111 米以内的查询才可能与完整精度结果不同,大多数受影响区域的宽度还要更小。

如需 100% 准确的查询,请使用完整数据集:

  • Gotzf.NewFullFinder()
  • Rust:启用 full feature(参见快速开始
  • Python/tzfpy:目前不支持完整精度模式

tzf 使用多少内存?

初始化开销和运行时开销不是同一个数字。构建 finder 时会把整个 .pb 数据集解码成中间表示,再据此建立查询结构,然后中间表示即被丢弃——但释放内存并不会让 RSS 缩小,分配器会保留这些页面以便复用。因此 finder 稳定运行时真正持有的数据,比加载过程中的高水位小好几倍。

以下数据来自 Apple M3 Max 上的 2026-07-26 基准快照

实现模式初始化峰值常驻
GoFuzzyFinder(仅预索引)30.4 MiB2.6 MiB
GoFinder(拓扑简化)127.8 MiB30.0 MiB
GoDefaultFinder(简化 + 预索引)124.3 MiB32.3 MiB
GoFullFinder(完整精度 + 预索引)359.4 MiB155.7 MiB
RustFuzzyFinder(仅预索引)23.8 MiB5.1 MiB
RustFinder(拓扑简化)48.0 MiB20.7 MiB
RustDefaultFinder(简化 + 预索引)77.0 MiB36.3 MiB
Pythontzfpy DefaultFinder94.8 MiBn/a
  • 初始化峰值是加载过程中达到的高水位(ru_maxrss)。容器内存限制必须能容纳这个值,否则进程会在启动阶段被杀死——即便它稳定运行时的占用完全放得下。
  • 常驻是 finder 准备好接受查询后实际持有的数据量,来自语言原生的内存统计(Go 为强制 GC 后的 HeapAlloc,Rust 为计数型全局分配器)。Python 的数据保存在 Python 堆之外,因此为 n/a

按初始化峰值来规划容器内存,但长期运行的实际成本应以常驻值为准。实际内存用量会因平台、内存分配器和数据集版本而变化。

为什么初始化较慢?

首次调用 NewDefaultFinder() / DefaultFinder::new() 会加载并解析二进制时区数据。这是一次性开销,后续查询非常快。务必初始化一次并复用实例。有关使用全局变量或 lazy_static 的模式,请参见各语言指南。

时区数据多久更新一次?

tzf 通过 evansiroky/timezone-boundary-builder 跟踪 IANA 时区数据库 的发布。处理后的数据发布在 ringsaturn/tzf-rel。各语言库版本会在上游数据发布后的短时间内跟进。

Finder、FuzzyFinder 和 DefaultFinder 有什么区别?

使用的数据覆盖范围速度
FuzzyFinder仅瓦片预索引仅内部瓦片,边界/未覆盖区域无结果最快
Finder多边形数据全球完整覆盖
DefaultFinder瓦片预索引 + 多边形全球完整覆盖

FuzzyFinder 预索引仅存储完全位于单个时区多边形内部的瓦片。当查询点落在被覆盖的瓦片中时,可立即返回正确的时区。当查询点落在未覆盖区域,例如边界附近、海岸线或稀疏区域时,返回空结果而不猜测。它并非"近似":结果准确,但覆盖范围不完整。

DefaultFinder(推荐)首先尝试瓦片预索引。如果未找到结果,则回退到完整多边形查询。这使得大多数世界城市查询保持近乎恒定的速度,同时对所有坐标保持正确性。

tzf 使用什么许可证?

代码使用 MIT 许可证。时区数据(通过 tzf-rel 分发)使用 ODbL, 与上游 evansiroky/timezone-boundary-builder 一致。

此外,tzftzf-rstzfpy 附带"反 CSDN 许可证"条款,禁止在 CSDN 平台上使用该代码。该条款对其他使用场景无影响。

详见许可证

最后更新于