perf(rule_engine): improve the time offset parser
This commit is contained in:
parent
ad5c62725a
commit
c8c2793944
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue