Config
View SourceAdd the following line to use TimeZoneInfo per default in the project.
config :elixir, :time_zone_database, TimeZoneInfo.TimeZoneDatabaseEnable automated updates
The automated update uses the default Downloader, and this one uses
Mint. Therefore the following
dependencies are needed in mix.exs.
defp deps do
[
...
{:castore, "~> 0.1.0"},
{:mint, "~> 1.0"},
...
]
endThe config has to be extended with:
config :time_zone_info, update: :dailyCustom downloader
It is also possible to use your own downloader. This requires an implementation
of the behaviour TimeZoneInfo.Downloader. The custom downloader has to be
specified in the config.
config :time_zone_info, [
update: :daily,
downloader: [
module: MyApp.TimeZonInfo.Downloader,
uri: "https://data.iana.org/time-zones/tzdata-latest.tar.gz",
mode: :iana,
headers: [
{"Content-Type", "application/tar+gzip"},
{"User-Agent", "Elixir.TimeZoneInfo.Mint"}
]
],
]The option update specifies the update interval. Possible values are :daily
and :disabled to disable the automated update.
The keys uri and headers containing to download the data.
The key mode can contain :iana, :etf, or :ws and indicates whether they
data are delivered in IANA format (.tar.gz) or in zipped ETF
(External Term Format).
In :ws mode, the request for the data contains query parameters. The parameters
are containing the configuration:
files[]: A list of IANA files which are used to generate theTimeZoneInfo.data.time_zones[]: A list of time zones. These parameters do not apply if no time zones are specified.lookahead
The response format in :ws mode is the same as in :etf mode.
Time zone manipulation
TimeZoneInfo provides some configuration options to select a subset form the
available time zones and the size of the generated periods table.
config :time_zone_info,
...
files: ~w(europe asia),
time_zones: ~w(Europe Asia/Istanbul),
lookahead: 5files:
Default: ["africa", "antarctica", "asia", "australasia", "backward", "etcetera", "europe", "northamerica", "southamerica")
This option specifies which files are parsed from the IANA data. The files
europe, asia, etc are self-explanatory. The file ecetera contains time
zones like Etc/UTC, Etc/Zulu, Etc/GMT+1, etc. The backward file contains
obsolete time zones. If you do not need the obsolete time zones, configure a
list without the backward file.
Note: The configuration :files takes no effect if update: :disabled is
set.
time_zones:
Default: :all
With time_zones: you can determine which time zones should be used. This
configuration expected a list of time zone names and/or areas like
["Asia", "Europe/Berlin"]. In this example all time zones in the area Asia and
the time zone "Europe/Berlin" are available.
If a time zone link matches the time_zones configuration, the linked time zone
will be also be available. For example, if you set time_zones: ["Europe/Jersey"]
then the time zone Europe/London is also available because Europe/Jersey
links this time zone.
lookahead:
Default: 5
The lookahead specifies for how many years from now the periods will be
calculated.
Note: They configuration :lookahead takes no effect if update: :disabled
is set.
Data persistence
TimeZoneInfo has two implementations of the behaviour
TimeZoneInfo.DataPersistence to persist data.
TimeZoneInfo.DataPersistence.Priv is used in the default configuration.
config :time_zone_info,
...
data_persistence: TimeZoneInfo.DataPersistence.Priv,
priv: [path: "data.etf"]This module is intended for simple configurations. The specified data.etf is
part of the TimeZoneInfo package and contains the transformed data from the
actual IANA time zone DB.
TimeZoneInfo.DataPersistence.FileSystem stores the data in a file to be
specified.
config :time_zone_info,
...
data_persistence: TimeZoneInfo.DataPersistence.FileSystem,
file_system: [path: "data/tzi.etf"]The data store
TimeZoneInfo provides two methods to store data at runtime.
The data can be stored either with :persistent_term or with :ets. The option
data_store holds this configuration. With data_store: :detect (default) the
method with :persistent_term will be used if :persitent_term is available
(OTP >= 21.2). To set a method explicitly use
data_store: TimeZoneInfo.DataStore.PersistentTerm or
data_store: TimeZoneInfo.DataStore.ErlangTermStorage.
No runtime config, no delete
It is not recomented to update the configuration at runtime. Becaus the data
in runtime will just be updated but never deleted. That means if you change
time_zones: :all to time_zones: ["Europe"] then all time zones are
available after an update.
This is not a problem for the automated update. Because all period tables will be updated.