Packages
tz_extra
0.2.0
0.45.0
0.44.0
0.43.0
0.42.0
0.41.0
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.0
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.1
0.22.0
0.21.1
0.21.0
0.20.1
0.20.0
0.17.0
0.16.7
0.16.6
0.16.5
0.16.3
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Time zone-related utilities
Current section
Files
Jump to
Current section
Files
lib/helper.ex
defmodule TzExtra.Helper do
@moduledoc false
def find_latest_std_offset_for_periods([%{to: :max} = period1, %{to: :max} = period2 | _]) do
Enum.max([period1.std_offset, period2.std_offset])
end
def find_latest_std_offset_for_periods([period | _]) do
period.std_offset
end
def find_latest_utc_offset_for_periods([period | _]) do
period.utc_offset
end
def find_zone_abbr_for_periods([%{to: :max} = period1, %{to: :max} = period2 | _]) do
Enum.min_by([period1, period2], & &1.std_offset).zone_abbr
end
def find_zone_abbr_for_periods([period | _]) do
period.zone_abbr
end
def find_dst_zone_abbr_for_periods([%{to: :max} = period1, %{to: :max} = period2 | _]) do
Enum.max_by([period1, period2], & &1.std_offset).zone_abbr
end
def find_dst_zone_abbr_for_periods([period | _]) do
period.zone_abbr
end
def offset_to_string(seconds) do
string =
abs(seconds)
|> :calendar.seconds_to_time()
|> do_offset_to_string()
|> List.to_string()
if(seconds < 0, do: "-", else: "+") <> string
end
defp do_offset_to_string({h, m, 0}), do: :io_lib.format("~2..0B:~2..0B", [h, m])
defp do_offset_to_string({h, m, s}), do: :io_lib.format("~2..0B:~2..0B:~2..0B", [h, m, s])
end