Update localtime.erl

This commit is contained in:
Dmitry Melnikov 2013-10-18 15:19:36 +04:00
parent 32028e4d59
commit 2c8dd7244b

View file

@ -30,10 +30,11 @@
,tz_shift/3 ,tz_shift/3
]). ]).
% utc_to_local(UtcDateTime, Timezone) -> LocalDateTime | {error, ErrDescr} % utc_to_local(UtcDateTime, Timezone) -> LocalDateTime | [LocalDateTime, DstLocalDateTime] | {error, ErrDescr}
% UtcDateTime = DateTime() % UtcDateTime = DateTime()
% Timezone = String() % Timezone = String()
% LocalDateTime = DateTime() % LocalDateTime = DateTime()
% DstLocalDateTime = DateTime()
% ErrDescr = atom(), 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
@ -49,20 +50,15 @@ utc_to_local(UtcDateTime, Timezone) ->
is_not_in_dst -> is_not_in_dst ->
LocalDateTime; LocalDateTime;
ambiguous_time -> ambiguous_time ->
RecheckIt = adjust_datetime(LocalDateTime, DstShift), [LocalDateTime, adjust_datetime(LocalDateTime, DstShift)]
case localtime_dst:check(RecheckIt, TzRule) of
ambiguous_time ->
RecheckIt;
_ ->
LocalDateTime
end
end end
end. end.
% local_to_utc(LocalDateTime, Timezone) -> UtcDateTime | tim_not_exists | {error, ErrDescr} % local_to_utc(LocalDateTime, Timezone) -> UtcDateTime | [UtcDateTime, DstUtcDateTime] | time_not_exists | {error, ErrDescr}
% LocalDateTime = DateTime() % LocalDateTime = DateTime()
% Timezone = String() % Timezone = String()
% UtcDateTime = DateTime() % UtcDateTime = DateTime()
% DstUtcDateTime = DateTime()
% ErrDescr = atom(), 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
@ -75,14 +71,16 @@ local_to_utc(LocalDateTime, Timezone) ->
case localtime_dst:check(LocalDateTime, TzRule) of case localtime_dst:check(LocalDateTime, TzRule) of
is_in_dst -> is_in_dst ->
adjust_datetime(UtcDateTime, invert_shift(DstShift)); adjust_datetime(UtcDateTime, invert_shift(DstShift));
Res when (Res == is_not_in_dst) or (Res == ambiguous_time) -> is_not_in_dst ->
UtcDateTime; UtcDateTime;
ambiguous_time ->
[UtcDateTime, adjust_datetime(UtcDateTime, invert_shift(DstShift))];
time_not_exists -> time_not_exists ->
time_not_exists time_not_exists
end end
end. end.
% local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo) -> LocalDateTime | tim_not_exists | {error, ErrDescr} % local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo) -> LocalDateTime | ambiguous | time_not_exists | {error, ErrDescr}
% LocalDateTime = DateTime() % LocalDateTime = DateTime()
% TimezoneFrom = String() % TimezoneFrom = String()
% TimezoneTo = String() % TimezoneTo = String()
@ -91,6 +89,8 @@ local_to_local(LocalDateTime, TimezoneFrom, TimezoneTo) ->
case local_to_utc(LocalDateTime, TimezoneFrom) of case local_to_utc(LocalDateTime, TimezoneFrom) of
Date = {{_,_,_},{_,_,_}} -> Date = {{_,_,_},{_,_,_}} ->
utc_to_local(Date, TimezoneTo); utc_to_local(Date, TimezoneTo);
[{{_,_,_},{_,_,_}},{{_,_,_},{_,_,_}}] ->
ambiguous;
Res -> Res ->
Res Res
end. end.