Timex.TimezoneInfo (timex v3.7.13)
View SourceAll relevant timezone information for a given period, i.e. Europe/Moscow on March 3rd, 2013
Notes:
full_nameis the name of the zone, but does not indicate anything about the current period (i.e. CST vs CDT)abbreviationis the abbreviated name for the zone in the current period, i.e. "America/Chicago" on 3/30/15 is "CDT"offset_stdis the offset in seconds from standard time for this periodoffset_utcis the offset in seconds from UTC for this period
Spec:
day_of_week: :sunday, :monday, :tuesday, etcdatetime: {{year, month, day}, {hour, minute, second}}from: :min | {day_of_week, datetime}, when this zone startsuntil: :max | {day_of_week, datetime}, when this zone ends
Summary
Functions
Create a custom timezone if a built-in one does not meet your needs.
Formats the offset of a Timex.TimezoneInfo struct.
Types
@type datetime() :: {{non_neg_integer(), 1..12, 1..31}, {0..24, 0..59, 0..60}}
@type day_of_week() ::
:sunday | :monday | :tuesday | :wednesday | :thursday | :friday | :saturday
@type from_constraint() :: :min | {day_of_week(), datetime()}
@type offset() :: -85399..85399
@type t() :: %Timex.TimezoneInfo{ abbreviation: String.t(), from: from_constraint(), full_name: String.t(), offset_std: offset(), offset_utc: offset(), until: until_constraint() }
@type until_constraint() :: :max | {day_of_week(), datetime()}
Functions
@spec create( String.t(), String.t(), offset(), offset(), from_constraint(), until_constraint() ) :: t() | {:error, String.t()}
Create a custom timezone if a built-in one does not meet your needs.
You must provide the name, abbreviation, offset from UTC, daylight savings time offset, and the from/until reference points for when the zone takes effect and ends.
To clarify the two offsets, offset_utc is the absolute offset relative to UTC,
offset_std is the offset to apply to offset_utc which gives us the offset from UTC
during daylight savings time for this timezone. If DST does not apply for this zone, simply
set it to 0.
The from/until reference points must meet the following criteria:
- Be set to
:minforfrom, or:maxforuntil, which represents "infinity" for the start/end of the zone period - OR, be a tuple of
{day_of_week, datetime}, where:day_of_weekis an atom like:sundaydatetimeis an Erlang datetime tuple, e.g.{{2016,10,8},{2,0,0}}
IMPORTANT: Offsets are in seconds, not minutes. If you do not ensure they are in the correct unit, runtime errors or incorrect results are probable.
Examples
iex> Elixir.Timex.TimezoneInfo.create("Etc/Test", "TST", 120*60, 0, :min, :max)
%TimezoneInfo{full_name: "Etc/Test", abbreviation: "TST", offset_std: 7200, offset_utc: 0, from: :min, until: :max}
...> Elixir.Timex.TimezoneInfo.create("Etc/Test", "TST", 24*60*60, 0, :min, :max)
{:error, "invalid timezone offset '86400'"}
Formats the offset of a Timex.TimezoneInfo struct.
Examples
iex> tzinfo = Timex.Timezone.get("Etc/Greenwich", ~U[2022-01-01 00:00:00Z])
...> Elixir.Timex.TimezoneInfo.format_offset(tzinfo)
"+00:00:00"
iex> tzinfo = Timex.Timezone.get("Africa/Nairobi", ~U[2022-01-01 00:00:00Z])
...> Elixir.Timex.TimezoneInfo.format_offset(tzinfo)
"+03:00:00"
iex> tzinfo = Timex.Timezone.get("America/New_York", ~U[2022-01-01 00:00:00Z])
...> Elixir.Timex.TimezoneInfo.format_offset(tzinfo)
"-05:00:00"