From 759dc09e89182f4a075bd388700b3760c61cf22e Mon Sep 17 00:00:00 2001 From: Kirilll Zaborsky Date: Mon, 26 Jan 2015 23:24:41 +0300 Subject: [PATCH 1/3] Proper zero padding for microseconds --- src/ec_date.erl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ec_date.erl b/src/ec_date.erl index 177230c..6a6d4a8 100644 --- a/src/ec_date.erl +++ b/src/ec_date.erl @@ -530,7 +530,7 @@ format([$i|T], {_,{_,M,_,_}}=Dt, Acc) -> format([$s|T], {_,{_,_,S,_}}=Dt, Acc) -> format(T, Dt, [pad2(S)|Acc]); format([$f|T], {_,{_,_,_,Ms}}=Dt, Acc) -> - format(T, Dt, [itol(Ms)|Acc]); + format(T, Dt, [pad6(Ms)|Acc]); %% Whole Dates format([$c|T], {{Y,M,D},{H,Min,S}}=Dt, Acc) -> @@ -687,6 +687,10 @@ pad2(X) when is_integer(X) -> pad2(X) when is_float(X) -> io_lib:format("~2.10.0B",[trunc(X)]). +-spec pad6(integer()) -> list(). +pad6(X) when is_integer(X) -> + io_lib:format("~6.10.0B",[X]). + ltoi(X) -> list_to_integer(X). @@ -933,7 +937,7 @@ iso_test_() -> ms_test_() -> Now=now(), [ - ?_assertEqual({{2012,12,12}, {12,12,12,1234}}, parse("2012-12-12T12:12:12.1234")), + ?_assertEqual({{2012,12,12}, {12,12,12,1234}}, parse("2012-12-12T12:12:12.001234")), ?_assertEqual(format("H:m:s.f \\m \\i\\s \\m\\o\\n\\t\\h",?DATEMS), "17:03:17.123456 m is month"), ?_assertEqual(format("Y-m-d\\TH:i:s.f",?DATEMS), @@ -944,6 +948,8 @@ ms_test_() -> "2001-03-10T05:16:17.123456"), ?_assertEqual(format("Y-m-d\\TH:i:s.f",nparse("2001-03-10T15:16:17.123456")), "2001-03-10T15:16:17.123456"), + ?_assertEqual(format("Y-m-d\\TH:i:s.f",nparse("2001-03-10T15:16:17.000123")), + "2001-03-10T15:16:17.000123"), ?_assertEqual(Now, nparse(format("Y-m-d\\TH:i:s.f", Now))) ]. From 20318d0fed820e64961d084d8b29f275fa279ace Mon Sep 17 00:00:00 2001 From: Kirilll Zaborsky Date: Mon, 26 Jan 2015 23:25:13 +0300 Subject: [PATCH 2/3] pad2 spec fix --- src/ec_date.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ec_date.erl b/src/ec_date.erl index 6a6d4a8..4d0f01b 100644 --- a/src/ec_date.erl +++ b/src/ec_date.erl @@ -680,7 +680,7 @@ iso_week_one(Y) -> itol(X) -> integer_to_list(X). --spec pad2(integer()) -> list(). +-spec pad2(integer() | float()) -> list(). %% @doc int padded with 0 to make sure its 2 chars pad2(X) when is_integer(X) -> io_lib:format("~2.10.0B",[X]); From d611f64a3b9188512aa06b37bfdb191ab4027191 Mon Sep 17 00:00:00 2001 From: Kirilll Zaborsky Date: Mon, 26 Jan 2015 23:25:44 +0300 Subject: [PATCH 3/3] Testcase showing broken microseconds parsing --- src/ec_date.erl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ec_date.erl b/src/ec_date.erl index 4d0f01b..0f34255 100644 --- a/src/ec_date.erl +++ b/src/ec_date.erl @@ -938,6 +938,7 @@ ms_test_() -> Now=now(), [ ?_assertEqual({{2012,12,12}, {12,12,12,1234}}, parse("2012-12-12T12:12:12.001234")), + ?_assertEqual({{2012,12,12}, {12,12,12,123000}}, parse("2012-12-12T12:12:12.123")), ?_assertEqual(format("H:m:s.f \\m \\i\\s \\m\\o\\n\\t\\h",?DATEMS), "17:03:17.123456 m is month"), ?_assertEqual(format("Y-m-d\\TH:i:s.f",?DATEMS),