Packages

Erlang library for conversion from one local time to another based on google cctz

Current section

Files

Jump to
elocaltime src elocaltime_utils.erl
Raw

src/elocaltime_utils.erl

-module(elocaltime_utils).
-export([
safe_call/2,
safe_call/3,
ts2datetime/1,
datetime2ts/1
]).
%% Days between Jan 1, 0001 (beginning of the Gregorian calendar) and Jan 1,
%% 1970 (Unix epoch) in seconds. 62167219200 = calendar:datetime_to_gregorian_seconds({{1970,1,1},{0,0,0}}).
-define(GREGORIAN_SECONDS_TO_UNIX_EPOCH, 62167219200).
safe_call(Receiver, Message) ->
safe_call(Receiver, Message, 5000).
safe_call(Receiver, Message, Timeout) ->
try
gen_server:call(Receiver, Message, Timeout)
catch
exit:{noproc, _} ->
{error, not_started};
_: Exception ->
{error, Exception}
end.
ts2datetime(Seconds) ->
SecsGregToEpoch = ?GREGORIAN_SECONDS_TO_UNIX_EPOCH,
calendar:gregorian_seconds_to_datetime(SecsGregToEpoch + Seconds).
datetime2ts(DateTime) ->
Seconds = calendar:datetime_to_gregorian_seconds(DateTime),
Seconds - ?GREGORIAN_SECONDS_TO_UNIX_EPOCH.