diff --git a/apps/emqx/src/emqx_calendar.erl b/apps/emqx/src/emqx_calendar.erl index 17218c6a5..dce73ec45 100644 --- a/apps/emqx/src/emqx_calendar.erl +++ b/apps/emqx/src/emqx_calendar.erl @@ -22,7 +22,7 @@ -define(DAYS_PER_YEAR, 365). -define(DAYS_PER_LEAP_YEAR, 366). -define(DAYS_FROM_0_TO_1970, 719528). --define(SECONDS_FROM_0_TO_1970, ?DAYS_FROM_0_TO_1970 * ?SECONDS_PER_DAY). +-define(SECONDS_FROM_0_TO_1970, (?DAYS_FROM_0_TO_1970 * ?SECONDS_PER_DAY)). -export([ formatter/1, @@ -140,12 +140,13 @@ offset_second_("Z") -> offset_second_("z") -> 0; offset_second_(Offset) when is_list(Offset) -> - Sign = hd(Offset), - ((Sign == $+) orelse (Sign == $-)) orelse - error({bad_time_offset, Offset}), - Signs = #{$+ => 1, $- => -1}, - PosNeg = maps:get(Sign, Signs), [Sign | HM] = Offset, + PosNeg = + case Sign of + $+ -> 1; + $- -> -1; + _ -> error({bad_time_offset, Offset}) + end, {HourStr, MinuteStr, SecondStr} = case string:tokens(HM, ":") of [H, M] -> @@ -157,9 +158,9 @@ offset_second_(Offset) when is_list(Offset) -> _ -> error({bad_time_offset, Offset}) end, - Hour = erlang:list_to_integer(HourStr), - Minute = erlang:list_to_integer(MinuteStr), - Second = erlang:list_to_integer(SecondStr), + Hour = list_to_int_or_error(HourStr, {bad_time_offset_hour, HourStr}), + Minute = list_to_int_or_error(MinuteStr, {bad_time_offset_minute, MinuteStr}), + Second = list_to_int_or_error(SecondStr, {bad_time_offset_second, SecondStr}), (Hour =< 23) orelse error({bad_time_offset_hour, Hour}), (Minute =< 59) orelse error({bad_time_offset_minute, Minute}), (Second =< 59) orelse error({bad_time_offset_second, Second}), @@ -454,3 +455,11 @@ dm(9) -> 243; dm(10) -> 273; dm(11) -> 304; dm(12) -> 334. + +list_to_int_or_error(Str, Error) -> + case string:to_integer(Str) of + {Int, []} -> + Int; + _ -> + error(Error) + end.