# 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:
```elixir
def deps do
[
{:tz_extra, "~> 0.5.0"}
]
end
```
## HexDocs
HexDocs documentation can be found at [https://hexdocs.pm/tz_extra](https://hexdocs.pm/tz_extra).