TzExtra

tz_extra provides a few utilities to work with time zones.

TzExtra.countries_time_zones/0

Returns a list of time zone data by country. The data includes:

  • the country and time zone;
  • the current UTC and DST offsets observed;
  • the links (other city names) linking to the time zone;
  • the zone abbreviation;
  • the coordinates.

Example

iex> TzExtra.countries_time_zones() |> Enum.at(5)
%{
  coordinates: "+0627+00324",
  country: %{code: "AO", name: "Angola"},
  dst_offset: 3600,
  dst_zone_abbr: "WAT",
  links: [
    "Bangui", "Brazzaville", "Douala",
    "Kinshasa", "Libreville", "Luanda",
    "Malabo", "Niamey", "Porto-Novo"
  ],
  pretty_dst_offset: "+01:00",
  pretty_utc_offset: "+01:00",
  time_zone: "Africa/Lagos",
  utc_offset: 3600,
  zone_abbr: "WAT"
}

Note that a time zone may be observed by multiple countries. For example, the tz database version 2019c lists 10 countries observing the time zone Africa/Lagos; this will result in 10 map entries for that time zone.

TzExtra.countries/0

iex> TzExtra.countries() |> Enum.take(5)
[
  %{code: "AF", name: "Afghanistan"},
  %{code: "AL", name: "Albania"},
  %{code: "DZ", name: "Algeria"},
  %{code: "AD", name: "Andorra"},
  %{code: "AO", name: "Angola"}
]

Automatic time zone data updates

tz_extra can watch for IANA time zone database updates and automatically recompile the time zone data.

To enable automatic updates, add TzExtra.UpdatePeriodically as a child in your supervisor:

{TzExtra.UpdatePeriodically, []}

TzExtra.UpdatePeriodically also triggers tz's time zone recompilation; so you don't need to add Tz.UpdatePeriodically if you added TzExtra.UpdatePeriodically in your supervisor.

Lastly, add the http client mint and ssl certificate store castore into your mix.exs file:

defp deps do
  [
    {:castore, "~> 0.1.5"},
    {:mint, "~> 1.0"},
    {:tz_extra, "~> 0.5.0"}
  ]
end

Installation

Add tz_extra for Elixir as a dependency in your mix.exs file:

def deps do
  [
    {:tz_extra, "~> 0.5.0"}
  ]
end

HexDocs

HexDocs documentation can be found at https://hexdocs.pm/tz_extra.