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_YEAR, 365).
|
||||||
-define(DAYS_PER_LEAP_YEAR, 366).
|
-define(DAYS_PER_LEAP_YEAR, 366).
|
||||||
-define(DAYS_FROM_0_TO_1970, 719528).
|
-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([
|
-export([
|
||||||
formatter/1,
|
formatter/1,
|
||||||
|
@ -140,12 +140,13 @@ offset_second_("Z") ->
|
||||||
offset_second_("z") ->
|
offset_second_("z") ->
|
||||||
0;
|
0;
|
||||||
offset_second_(Offset) when is_list(Offset) ->
|
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,
|
[Sign | HM] = Offset,
|
||||||
|
PosNeg =
|
||||||
|
case Sign of
|
||||||
|
$+ -> 1;
|
||||||
|
$- -> -1;
|
||||||
|
_ -> error({bad_time_offset, Offset})
|
||||||
|
end,
|
||||||
{HourStr, MinuteStr, SecondStr} =
|
{HourStr, MinuteStr, SecondStr} =
|
||||||
case string:tokens(HM, ":") of
|
case string:tokens(HM, ":") of
|
||||||
[H, M] ->
|
[H, M] ->
|
||||||
|
@ -157,9 +158,9 @@ offset_second_(Offset) when is_list(Offset) ->
|
||||||
_ ->
|
_ ->
|
||||||
error({bad_time_offset, Offset})
|
error({bad_time_offset, Offset})
|
||||||
end,
|
end,
|
||||||
Hour = erlang:list_to_integer(HourStr),
|
Hour = list_to_int_or_error(HourStr, {bad_time_offset_hour, HourStr}),
|
||||||
Minute = erlang:list_to_integer(MinuteStr),
|
Minute = list_to_int_or_error(MinuteStr, {bad_time_offset_minute, MinuteStr}),
|
||||||
Second = erlang:list_to_integer(SecondStr),
|
Second = list_to_int_or_error(SecondStr, {bad_time_offset_second, SecondStr}),
|
||||||
(Hour =< 23) orelse error({bad_time_offset_hour, Hour}),
|
(Hour =< 23) orelse error({bad_time_offset_hour, Hour}),
|
||||||
(Minute =< 59) orelse error({bad_time_offset_minute, Minute}),
|
(Minute =< 59) orelse error({bad_time_offset_minute, Minute}),
|
||||||
(Second =< 59) orelse error({bad_time_offset_second, Second}),
|
(Second =< 59) orelse error({bad_time_offset_second, Second}),
|
||||||
|
@ -454,3 +455,11 @@ dm(9) -> 243;
|
||||||
dm(10) -> 273;
|
dm(10) -> 273;
|
||||||
dm(11) -> 304;
|
dm(11) -> 304;
|
||||||
dm(12) -> 334.
|
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