timezone-detect: Haskell bindings for the zone-detect C library; plus tz-aware utils.

[ data, foreign, gpl, library, time ] [ Propose Tags ]


[Index] [Quick Jump]


Maintainer's Corner

For package maintainers and hackage trustees


Versions [RSS],,,,,
Change log ChangeLog.md
Dependencies base (>=4.9 && <4.14), time (>=1.9.1 && <=1.10), timezone-olson (>=0.2.0 && <0.3), timezone-series (>=0.1.0 && <0.2) [details]
License GPL-2.0-only
Author Luis Borjas Reyes
Maintainer timezone-detect@lfborjas.com
Category Data, Foreign, Time
Home page https://github.com/lfborjas/timezone-detect#readme
Bug tracker https://github.com/lfborjas/timezone-detect/issues
Source repo head: git clone https://github.com/lfborjas/timezone-detect
Uploaded by lfborjas at 2020-08-30T20:58:47Z
Distributions NixOS:
Downloads 734 total (1 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2020-08-30 [all 1 reports]

Readme for timezone-detect-

[back to package description]



Haskell bindings to the excellent ZoneDetect library, plus additional UNIX-aware facilities to determine the UTC time of a given local time in a latitude and longitude.


You'll need timezone database files to work with this library, see instructions in the original repository.

Once you have those files in hand, you'll be able to get a timezone from a given latitude and longitude:

>>> lookupTimeZoneName "./test/tz_db/timezone21.bin" 40.7831 (-73.9712) :: Maybe TimeZoneName
Just "America/New_York"

Additionally, we now depend on the timezone-series and timezone-olson packages to add awareness of tz database information.

With that, you can look up the UTC time at a point in time and space:

>>> import Data.Time
>>> localWinter <- parseTimeM True defaultTimeLocale "%Y-%-m-%-d %T" "2019-12-25 00:30:00"
>>> utcTime <- timeAtPointToUTC "./test/tz_db/timezone21.bin" 40.7831 (-73.9712) localWinter
2019-12-25 05:30:00 UTC

>>> localSummer <- parseTimeM True defaultTimeLocale "%Y-%-m-%-d %T" "2019-07-25 00:30:00"
>>> utcTime <- timeAtPointToUTC "./test/tz_db/timezone21.bin" 40.7831 (-73.9712) localWinter
2019-07-25 04:30:00 UTC

You can also opt to obtain the timezone name separately (if you wanted to isolate that as a failure scenario,) and, once in possession of it, use timeInTimeZoneToUTC:

>>> localSummer <- parseTimeM True defaultTimeLocale "%Y-%-m-%-d %T" "2019-07-25 00:30:00"
>>> utcTime <- timeInTimeZoneToUTC "America/New_York" localSummer
2019-07-25 04:30:00 UTC