Рефакторинг обработчиков. Часть 2 #21
This commit is contained in:
@@ -17,6 +17,7 @@
|
||||
parse_int_qs/2,
|
||||
parse_datetime_qs/1,
|
||||
parse_datetime/1,
|
||||
datetime_to_iso8601/1,
|
||||
event_to_json/1,
|
||||
user_to_json/1,
|
||||
review_to_json/1,
|
||||
@@ -117,18 +118,31 @@ parse_datetime_qs(Bin) ->
|
||||
-spec parse_datetime(binary()) -> {ok, calendar:datetime()} | {error, invalid_format}.
|
||||
parse_datetime(Str) ->
|
||||
try
|
||||
[DateStr, TimeStr] = string:split(Str, "T"),
|
||||
TimeStrNoZ = string:trim(TimeStr, trailing, "Z"),
|
||||
[YearStr, MonthStr, DayStr] = string:split(DateStr, "-", all),
|
||||
[HourStr, MinuteStr, SecondStr] = string:split(TimeStrNoZ, ":", all),
|
||||
Year = binary_to_integer(list_to_binary(YearStr)),
|
||||
Month = binary_to_integer(list_to_binary(MonthStr)),
|
||||
Day = binary_to_integer(list_to_binary(DayStr)),
|
||||
Hour = binary_to_integer(list_to_binary(HourStr)),
|
||||
Minute = binary_to_integer(list_to_binary(MinuteStr)),
|
||||
Second = binary_to_integer(list_to_binary(SecondStr)),
|
||||
%% Убираем завершающий 'Z', если он есть
|
||||
Clean = case binary:last(Str) of
|
||||
$Z -> binary_part(Str, 0, byte_size(Str) - 1);
|
||||
_ -> Str
|
||||
end,
|
||||
%% Разделяем дату и время
|
||||
[DatePart, TimePart] = binary:split(Clean, <<"T">>),
|
||||
%% Парсим дату YYYY-MM-DD
|
||||
[YearStr, MonthStr, DayStr] = binary:split(DatePart, <<"-">>, [global]),
|
||||
%% Убираем дробные секунды, если есть
|
||||
TimeMain = case binary:split(TimePart, <<".">>) of
|
||||
[Main, _] -> Main;
|
||||
[Main] -> Main
|
||||
end,
|
||||
%% Парсим время HH:MM:SS
|
||||
[HourStr, MinuteStr, SecondStr] = binary:split(TimeMain, <<":">>, [global]),
|
||||
Year = binary_to_integer(YearStr),
|
||||
Month = binary_to_integer(MonthStr),
|
||||
Day = binary_to_integer(DayStr),
|
||||
Hour = binary_to_integer(HourStr),
|
||||
Minute = binary_to_integer(MinuteStr),
|
||||
Second = binary_to_integer(SecondStr),
|
||||
{ok, {{Year, Month, Day}, {Hour, Minute, Second}}}
|
||||
catch _:_ -> {error, invalid_format}
|
||||
catch
|
||||
_:_ -> {error, invalid_format}
|
||||
end.
|
||||
|
||||
%%%===================================================================
|
||||
|
||||
Reference in New Issue
Block a user