Packages
timex
2.1.6
3.7.13
3.7.12
3.7.11
3.7.9
3.7.8
3.7.7
3.7.6
3.7.5
3.7.3
3.7.2
3.7.1
3.7.0
3.6.4
3.6.3
3.6.2
retired
3.6.1
3.6.0
3.5.0
3.4.2
3.4.1
3.3.0
3.2.2
3.2.1
3.2.0
3.1.25
retired
3.1.24
3.1.23
3.1.22
3.1.21
3.1.20
3.1.19
3.1.18
3.1.17
3.1.16
3.1.15
3.1.13
3.1.12
3.1.11
3.1.10
3.1.9
3.1.8
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.2.1
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.0
1.0.2
1.0.1
1.0.0
1.0.0-rc4
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
1.0.0-pre
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.2
0.18.1
0.18.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.0
0.10.2
0.10.1
0.10.0
0.9.0
0.8.0
0.7.1
0.6.0
0.5.0
0.4.8
0.4.7
0.4.6
Timex is a rich, comprehensive Date/Time library for Elixir projects, with full timezone support via the :tzdata package. If you need to manipulate dates, times, datetimes, timestamps, etc., then Timex is for you!
Current section
Files
Jump to
Current section
Files
lib/convert/tuple.ex
defimpl Timex.Convertable, for: Tuple do
alias Timex.Date
alias Timex.DateTime
alias Timex.AmbiguousDateTime
alias Timex.Time
alias Timex.Convertable
import Timex.Macros
def to_gregorian({y, m, d} = date) when is_date(y,m,d) do
case :calendar.valid_date(date) do
true ->
{date, {0, 0, 0}, {0, "UTC"}}
false ->
{:error, :invalid_date}
end
end
def to_gregorian({mega, secs, micro}) when is_date_timestamp(mega,secs,micro) do
DateTime.from_timestamp({mega, secs, micro}) |> Convertable.to_gregorian
end
def to_gregorian({{y, m, d} = date, {h, mm, s} = time}) when is_datetime(y,m,d,h,mm,s),
do: {date, time, {0, "UTC"}}
def to_gregorian({{y, m, d} = date, {h, mm, s, _} = time}) when is_datetime(y,m,d,h,mm,s),
do: {date, time, {0, "UTC"}}
def to_gregorian({{y,m,d}, {h,mm,s}, {offset,tz}} = gregorian) when is_gregorian(y,m,d,h,mm,s,offset,tz),
do: gregorian
def to_gregorian(_),
do: {:error, :badarg}
def to_julian({y, m, d} = date) when is_date(y,m,d) do
case :calendar.valid_date(date) do
true ->
Timex.Calendar.Julian.julian_date(date)
false ->
{:error, :invalid_date}
end
end
def to_julian({mega, secs, micro}) when is_date_timestamp(mega,secs,micro) do
DateTime.from_timestamp({mega, secs, micro}) |> Convertable.to_julian
end
def to_julian({{y, m, d} = date, {h, mm, s} = time}) when is_datetime(y,m,d,h,mm,s),
do: Timex.Calendar.Julian.julian_date({date, time})
def to_julian({{y, m, d} = date, {h, mm, s, _}}) when is_datetime(y,m,d,h,mm,s),
do: Timex.Calendar.Julian.julian_date({date, {y, mm, s}})
def to_julian({{y,m,d} = date, {h,mm,s} = time, {offset,tz}}) when is_gregorian(y,m,d,h,mm,s,offset,tz),
do: Timex.Calendar.Julian.julian_date({date, time})
def to_julian(_),
do: {:error, :badarg}
def to_gregorian_seconds({y, m, d} = date) when is_date(y,m,d) do
case :calendar.valid_date(date) do
true -> :calendar.datetime_to_gregorian_seconds({{y,m,d},{0,0,0}})
false -> {:error, :invalid_date}
end
end
def to_gregorian_seconds({{y, m, d} = date, {h, mm, s}} = datetime) when is_datetime(y,m,d,h,mm,s) do
case :calendar.valid_date(date) do
true -> :calendar.datetime_to_gregorian_seconds(datetime)
false -> {:error, :invalid_date}
end
end
def to_gregorian_seconds({{y, m, d} = date, {h, mm, s, ms}} = datetime) when is_datetime(y,m,d,h,mm,s,ms) do
case :calendar.valid_date(date) do
true -> :calendar.datetime_to_gregorian_seconds(datetime)
false -> {:error, :invalid_date}
end
end
def to_gregorian_seconds({{y, m, d} = date, {h, mm, s}, {offset, tz}} = datetime) when is_gregorian(y,m,d,h,mm,s,offset,tz) do
case :calendar.valid_date(date) do
true -> :calendar.datetime_to_gregorian_seconds(datetime)
false -> {:error, :invalid_date}
end
end
def to_gregorian_seconds(_),
do: {:error, :badarg}
def to_erlang_datetime({y, m, d} = date) when is_date(y,m,d) do
case :calendar.valid_date(date) do
true ->
{date, {0, 0, 0}}
false ->
{:error, :invalid_date}
end
end
def to_erlang_datetime({mega,secs,micro}) when is_date_timestamp(mega,secs,micro) do
DateTime.from_timestamp({mega,secs,micro}) |> Convertable.to_erlang_datetime
end
def to_erlang_datetime({{y,m,d}, {h,mm,s}} = datetime) when is_datetime(y,m,d,h,mm,s),
do: datetime
def to_erlang_datetime({{y,m,d}, {h,mm,s, _}} = datetime) when is_datetime(y,m,d,h,mm,s),
do: datetime
def to_erlang_datetime({{y,m,d} = date, {h,mm,s} = time, {offset,tz}}) when is_gregorian(y,m,d,h,mm,s,offset,tz),
do: {date, time}
def to_erlang_datetime(_),
do: {:error, :badarg}
def to_date({{y,m,d}, {h,mm,s}, _} = datetime) when is_datetime(y,m,d,h,mm,s),
do: Date.from(datetime)
def to_date({{y,m,d}, {h,mm,s,ms}} = datetime) when is_datetime(y,m,d,h,mm,s,ms),
do: Date.from_erl(datetime)
def to_date({{y,m,d}, {h,mm,s}} = datetime) when is_datetime(y,m,d,h,mm,s),
do: Date.from_erl(datetime)
def to_date({y,m,d} = date) when is_date(y,m,d),
do: Date.from_erl(date)
def to_date(_),
do: {:error, :invalid_date}
def to_datetime({{y,m,d}, {h,mm,s}, _} = datetime) when is_datetime(y,m,d,h,mm,s),
do: DateTime.from(datetime)
def to_datetime({{y,m,d}, {h,mm,s,ms}} = datetime) when is_datetime(y,m,d,h,mm,s,ms),
do: DateTime.from_erl(datetime)
def to_datetime({{y,m,d}, {h,mm,s}} = datetime) when is_datetime(y,m,d,h,mm,s),
do: DateTime.from_erl(datetime)
def to_datetime({y,m,d} = date) when is_date(y,m,d),
do: DateTime.from_erl(date)
def to_datetime(_),
do: {:error, :invalid_date}
def to_unix({y, m, d} = date) when is_date(y,m,d) do
case :calendar.valid_date(date) do
true -> DateTime.to_seconds(DateTime.from_erl(date), :epoch)
false -> {:error, :invalid_date}
end
end
def to_unix({mega,secs,micro} = timestamp) when is_date_timestamp(mega,secs,micro) do
Time.to_seconds(timestamp)
end
def to_unix({{_,_,_}, {_,_,_}} = datetime) do
case DateTime.from_erl(datetime) do
{:error, _} = err -> err
%DateTime{} = dt -> DateTime.to_seconds(dt, :epoch)
end
end
def to_unix({{_,_,_}, {_,_,_,_}} = datetime) do
case DateTime.from_erl(datetime) do
{:error, _} = err -> err
%DateTime{} = dt -> DateTime.to_seconds(dt, :epoch)
end
end
def to_unix({{_,_,_}, {_,_,_,_}, {_, _}} = datetime) do
case DateTime.from(datetime) do
{:error, _} = err ->
err
%DateTime{} = dt ->
DateTime.to_seconds(dt, :epoch)
%AmbiguousDateTime{} = adt ->
{:error, {:ambiguous_datetime, adt}}
end
end
def to_unix(_), do: {:error, :badarg}
def to_timestamp({y, m, d} = date) when is_date(y,m,d) do
case Date.from_erl(date) do
{:error, _} = err -> err
%Date{} = dt -> Date.to_timestamp(dt)
end
end
def to_timestamp({{y, m, d}, {h, mm, s}} = datetime) when is_datetime(y,m,d,h,mm,s) do
case DateTime.from_erl(datetime) do
{:error, _} = err -> err
%DateTime{} = dt -> DateTime.to_timestamp(dt)
end
end
def to_timestamp({{y, m, d}, {h, mm, s, ms}} = datetime) when is_datetime(y,m,d,h,mm,s,ms) do
case DateTime.from_erl(datetime) do
{:error, _} = err -> err
%DateTime{} = dt -> DateTime.to_timestamp(dt)
end
end
def to_timestamp({{y, m, d}, {h, mm, s}, {offset,tz}} = gregorian) when is_gregorian(y,m,d,h,mm,s,offset,tz) do
case DateTime.from(gregorian) do
{:error, _} = err ->
err
%DateTime{} = dt ->
DateTime.to_timestamp(dt)
%AmbiguousDateTime{} = adt ->
{:error, {:ambiguous_datetime, adt}}
end
end
end