comments fixed
This commit is contained in:
parent
5f9bf0ecf5
commit
5f97d37bed
1 changed files with 26 additions and 10 deletions
|
@ -34,7 +34,7 @@
|
||||||
% UtcDateTime = DateTime()
|
% UtcDateTime = DateTime()
|
||||||
% Timezone = String()
|
% Timezone = String()
|
||||||
% LocalDateTime = DateTime()
|
% LocalDateTime = DateTime()
|
||||||
% ErrDescr = unknown_tz
|
% ErrDescr = atom(), unknown_tz
|
||||||
utc_to_local(UtcDateTime, Timezone) ->
|
utc_to_local(UtcDateTime, Timezone) ->
|
||||||
case lists:keyfind(get_timezone(Timezone), 1, ?tz_database) of
|
case lists:keyfind(get_timezone(Timezone), 1, ?tz_database) of
|
||||||
false ->
|
false ->
|
||||||
|
@ -63,7 +63,7 @@ utc_to_local(UtcDateTime, Timezone) ->
|
||||||
% LocalDateTime = DateTime()
|
% LocalDateTime = DateTime()
|
||||||
% Timezone = String()
|
% Timezone = String()
|
||||||
% UtcDateTime = DateTime()
|
% UtcDateTime = DateTime()
|
||||||
% ErrDescr = unknown_tz
|
% ErrDescr = atom(), unknown_tz
|
||||||
local_to_utc(LocalDateTime, Timezone) ->
|
local_to_utc(LocalDateTime, Timezone) ->
|
||||||
case lists:keyfind(get_timezone(Timezone), 1, ?tz_database) of
|
case lists:keyfind(get_timezone(Timezone), 1, ?tz_database) of
|
||||||
false ->
|
false ->
|
||||||
|
@ -86,7 +86,7 @@ local_to_utc(LocalDateTime, Timezone) ->
|
||||||
% LocalDateTime = DateTime()
|
% LocalDateTime = DateTime()
|
||||||
% TimezoneFrom = String()
|
% TimezoneFrom = String()
|
||||||
% TimezoneTo = String()
|
% TimezoneTo = String()
|
||||||
% ErrDescr = unknown_tz
|
% ErrDescr = atom(), unknown_tz
|
||||||
local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo) ->
|
local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo) ->
|
||||||
case local_to_utc(LocalDateTime, TimezoneFrom) of
|
case local_to_utc(LocalDateTime, TimezoneFrom) of
|
||||||
Date = {{_,_,_},{_,_,_}} ->
|
Date = {{_,_,_},{_,_,_}} ->
|
||||||
|
@ -95,7 +95,7 @@ local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo) ->
|
||||||
Res
|
Res
|
||||||
end.
|
end.
|
||||||
|
|
||||||
% tz_name(DateTime(), Timezone) -> {Abbr, Name} | {{StdAbbr, StdName}, {DstAbbr, DstName}} | unable_to_detect
|
% tz_name(DateTime(), Timezone) -> {Abbr, Name} | {{StdAbbr, StdName}, {DstAbbr, DstName}} | unable_to_detect | {error, ErrDesc}
|
||||||
% Timezone = String()
|
% Timezone = String()
|
||||||
% Abbr = String()
|
% Abbr = String()
|
||||||
% Name = String()
|
% Name = String()
|
||||||
|
@ -103,6 +103,7 @@ local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo) ->
|
||||||
% StdName = String()
|
% StdName = String()
|
||||||
% DstAbbr = String()
|
% DstAbbr = String()
|
||||||
% DstName = String()
|
% DstName = String()
|
||||||
|
% ErrDesc = atom(), unknown_tz
|
||||||
tz_name(_UtcDateTime, "UTC") ->
|
tz_name(_UtcDateTime, "UTC") ->
|
||||||
{"UTC", "UTC"};
|
{"UTC", "UTC"};
|
||||||
tz_name(LocalDateTime, Timezone) ->
|
tz_name(LocalDateTime, Timezone) ->
|
||||||
|
@ -124,7 +125,7 @@ tz_name(LocalDateTime, Timezone) ->
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
% tz_shift(LocalDateTime, Timezone) -> Shift | {Shift, DstSift} | unable_to_detect
|
% tz_shift(LocalDateTime, Timezone) -> Shift | {Shift, DstSift} | unable_to_detect | {error, ErrDesc}
|
||||||
% returns time shift from GMT
|
% returns time shift from GMT
|
||||||
% LocalDateTime = DateTime()
|
% LocalDateTime = DateTime()
|
||||||
% Timezone = String()
|
% Timezone = String()
|
||||||
|
@ -132,6 +133,7 @@ tz_name(LocalDateTime, Timezone) ->
|
||||||
% Sign = term(), '+', '-'
|
% Sign = term(), '+', '-'
|
||||||
% Hours = Minutes = Integer(),
|
% Hours = Minutes = Integer(),
|
||||||
% {Shift, DstShift} - returns, when shift is ambiguous
|
% {Shift, DstShift} - returns, when shift is ambiguous
|
||||||
|
% ErrDesc = atom(), unknown_tz
|
||||||
tz_shift(_UtcDateTime, "UTC") ->
|
tz_shift(_UtcDateTime, "UTC") ->
|
||||||
0;
|
0;
|
||||||
tz_shift(LocalDateTime, Timezone) ->
|
tz_shift(LocalDateTime, Timezone) ->
|
||||||
|
@ -153,11 +155,23 @@ tz_shift(LocalDateTime, Timezone) ->
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
% the same as tz_shift/2, but calculates time difference between two local timezones
|
||||||
tz_shift(LocalDateTime, TimezoneFrom, TimezoneTo) ->
|
tz_shift(LocalDateTime, TimezoneFrom, TimezoneTo) ->
|
||||||
|
F = fun() ->
|
||||||
FromShift = fmt_shift(tz_shift(LocalDateTime, TimezoneFrom)),
|
FromShift = fmt_shift(tz_shift(LocalDateTime, TimezoneFrom)),
|
||||||
DateTimeTo = localtime:local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo),
|
DateTimeTo = localtime:local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo),
|
||||||
ToShift = fmt_shift(tz_shift(DateTimeTo, TimezoneTo)),
|
ToShift = fmt_shift(tz_shift(DateTimeTo, TimezoneTo)),
|
||||||
fmt_min(ToShift-FromShift).
|
fmt_min(ToShift-FromShift)
|
||||||
|
end,
|
||||||
|
try F()
|
||||||
|
catch
|
||||||
|
_:Err ->
|
||||||
|
Err
|
||||||
|
end.
|
||||||
|
|
||||||
|
% =======================================================================
|
||||||
|
% privates
|
||||||
|
% =======================================================================
|
||||||
|
|
||||||
adjust_datetime(DateTime, Minutes) ->
|
adjust_datetime(DateTime, Minutes) ->
|
||||||
Seconds = calendar:datetime_to_gregorian_seconds(DateTime) + Minutes * 60,
|
Seconds = calendar:datetime_to_gregorian_seconds(DateTime) + Minutes * 60,
|
||||||
|
@ -174,7 +188,9 @@ fmt_min(Shift) ->
|
||||||
fmt_shift({'+', H, M}) ->
|
fmt_shift({'+', H, M}) ->
|
||||||
H * 60 + M;
|
H * 60 + M;
|
||||||
fmt_shift({'-', H, M}) ->
|
fmt_shift({'-', H, M}) ->
|
||||||
-(H * 60 + M).
|
-(H * 60 + M);
|
||||||
|
fmt_shift(Any) ->
|
||||||
|
throw(Any).
|
||||||
|
|
||||||
get_timezone(TimeZone) ->
|
get_timezone(TimeZone) ->
|
||||||
case dict:find(TimeZone, ?tz_index) of
|
case dict:find(TimeZone, ?tz_index) of
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue