Skip to main content

Probably the fastest Python package to convert longitude/latitude to timezone name

Project description

tzfpy PyPI

It's probably the fastest Python package to convert longitude/latitude to timezone name.

NOTE:

  1. This package use a simplified polygon data and not so accurate around borders.
  2. Rust use lazy init, so first calling will be a little slow.
  3. Use about 40MB memory.

It's tested under Python 3.9+ but support 3.7+(noqa).

Usage

Please note that new timezone names may be added to tzfpy, which could be incompatible with old version package like pytz. As an option, tzfpy supports install compatible version of those packages with extra params.

# Install just tzfpy
pip install tzfpy

# Install tzfpy with pytz
pip install "tzfpy[pytz]"
>>> from tzfpy import get_tz, get_tzs
>>> get_tz(116.3883, 39.9289)  # in (longitude, latitude) order.
'Asia/Shanghai'
>>> get_tzs(87.4160, 44.0400)  # in (longitude, latitude) order.
['Asia/Shanghai', 'Asia/Urumqi']

Performance

Benchmark runs under v0.15.0 on my MacBook Pro with 2.3 GHz 8-Core Intel Core i9.

pytest tests/test_bench.py
-------------------------------------------------- benchmark: 1 tests --------------------------------------------------
Name (time in us)               Min      Max    Mean  StdDev  Median     IQR  Outliers  OPS (Kops/s)  Rounds  Iterations
------------------------------------------------------------------------------------------------------------------------
test_tzfpy_random_cities     1.4783  34.8846  3.6341  1.9382  3.2185  2.1708  4384;754      275.1715   20000          10
------------------------------------------------------------------------------------------------------------------------

Legend:
  Outliers: 1 Standard Deviation from Mean; 1.5 IQR (InterQuartile Range) from 1st Quartile and 3rd Quartile.
  OPS: Operations Per Second, computed as 1 / Mean
Results (1.10s):
         1 passed

Or you can view more benchmark results on GitHub Action summary page.

Background

tzfpy was originally written in Go named tzf and use CGO compiled to .so to be used by Python. Since v0.11.0 it's rewritten in Rust built on PyO3 and tzf-rs, a tzf's Rust port.

I have written an article about the history of tzf, its Rust port, and its Rust port's Python binding; you can view it here.

LICENSE

This project is licensed under the MIT license. The data is licensed under the ODbL license, same as evansiroky/timezone-boundary-builder

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

tzfpy-0.15.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl (7.3 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ ARM64

tzfpy-0.15.1-pp310-pypy310_pp73-manylinux_2_24_armv7l.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.24+ ARMv7l

tzfpy-0.15.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

tzfpy-0.15.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

tzfpy-0.15.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl (7.3 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ ARM64

tzfpy-0.15.1-pp39-pypy39_pp73-manylinux_2_24_armv7l.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.24+ ARMv7l

tzfpy-0.15.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

tzfpy-0.15.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

tzfpy-0.15.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl (7.3 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ ARM64

tzfpy-0.15.1-pp38-pypy38_pp73-manylinux_2_24_armv7l.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.24+ ARMv7l

tzfpy-0.15.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

tzfpy-0.15.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

tzfpy-0.15.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl (7.3 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ ARM64

tzfpy-0.15.1-pp37-pypy37_pp73-manylinux_2_24_armv7l.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.24+ ARMv7l

tzfpy-0.15.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

tzfpy-0.15.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

tzfpy-0.15.1-cp312-cp312-musllinux_1_1_aarch64.whl (7.3 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ ARM64

tzfpy-0.15.1-cp312-cp312-manylinux_2_24_armv7l.whl (7.1 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.24+ ARMv7l

tzfpy-0.15.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.1 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

tzfpy-0.15.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

tzfpy-0.15.1-cp311-none-win_amd64.whl (6.1 MB view hashes)

Uploaded CPython 3.11 Windows x86-64

tzfpy-0.15.1-cp311-cp311-musllinux_1_1_aarch64.whl (7.3 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ ARM64

tzfpy-0.15.1-cp311-cp311-manylinux_2_24_armv7l.whl (7.1 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.24+ ARMv7l

tzfpy-0.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.1 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

tzfpy-0.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

tzfpy-0.15.1-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (12.6 MB view hashes)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

tzfpy-0.15.1-cp310-none-win_amd64.whl (6.1 MB view hashes)

Uploaded CPython 3.10 Windows x86-64

tzfpy-0.15.1-cp310-cp310-musllinux_1_1_x86_64.whl (7.3 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

tzfpy-0.15.1-cp310-cp310-musllinux_1_1_aarch64.whl (7.3 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ ARM64

tzfpy-0.15.1-cp310-cp310-manylinux_2_24_armv7l.whl (7.1 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.24+ ARMv7l

tzfpy-0.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.1 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

tzfpy-0.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

tzfpy-0.15.1-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (12.6 MB view hashes)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

tzfpy-0.15.1-cp39-none-win_amd64.whl (6.1 MB view hashes)

Uploaded CPython 3.9 Windows x86-64

tzfpy-0.15.1-cp39-cp39-musllinux_1_1_aarch64.whl (7.3 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ ARM64

tzfpy-0.15.1-cp39-cp39-manylinux_2_24_armv7l.whl (7.1 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.24+ ARMv7l

tzfpy-0.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.1 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

tzfpy-0.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

tzfpy-0.15.1-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (12.6 MB view hashes)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

tzfpy-0.15.1-cp38-none-win_amd64.whl (6.1 MB view hashes)

Uploaded CPython 3.8 Windows x86-64

tzfpy-0.15.1-cp38-cp38-musllinux_1_1_aarch64.whl (7.3 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ ARM64

tzfpy-0.15.1-cp38-cp38-manylinux_2_24_armv7l.whl (7.1 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.24+ ARMv7l

tzfpy-0.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.1 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

tzfpy-0.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

tzfpy-0.15.1-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (12.6 MB view hashes)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

tzfpy-0.15.1-cp37-none-win_amd64.whl (6.1 MB view hashes)

Uploaded CPython 3.7 Windows x86-64

tzfpy-0.15.1-cp37-cp37m-musllinux_1_1_aarch64.whl (7.3 MB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ ARM64

tzfpy-0.15.1-cp37-cp37m-manylinux_2_24_armv7l.whl (7.1 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.24+ ARMv7l

tzfpy-0.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.1 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

tzfpy-0.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (7.1 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

tzfpy-0.15.1-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl (12.6 MB view hashes)

Uploaded CPython 3.7m macOS 10.9+ universal2 (ARM64, x86-64) macOS 10.9+ x86-64 macOS 11.0+ ARM64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page