comments fixed

This commit is contained in:
Dmitry Melnikov 2010-12-19 12:02:02 +03:00
parent 5f9bf0ecf5
commit 5f97d37bed

View file

@ -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) ->
FromShift = fmt_shift(tz_shift(LocalDateTime, TimezoneFrom)), F = fun() ->
DateTimeTo = localtime:local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo), FromShift = fmt_shift(tz_shift(LocalDateTime, TimezoneFrom)),
ToShift = fmt_shift(tz_shift(DateTimeTo, TimezoneTo)), DateTimeTo = localtime:local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo),
fmt_min(ToShift-FromShift). ToShift = fmt_shift(tz_shift(DateTimeTo, TimezoneTo)),
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