From d7dbf47a3f344ba0384f4e7383700d13eacdc5d3 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Mon, 2 Sep 2019 17:13:54 +0200 Subject: [PATCH] time/ISO8601: support omitting minutes --- src/time/ISO8601.cxx | 2 ++ test/TestISO8601.cxx | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/src/time/ISO8601.cxx b/src/time/ISO8601.cxx index f4d0d5d38..b92a0e743 100644 --- a/src/time/ISO8601.cxx +++ b/src/time/ISO8601.cxx @@ -138,6 +138,8 @@ ParseISO8601(const char *s) precision = std::chrono::seconds(1); else if ((end = strptime(s, "%H:%M", &tm)) != nullptr) precision = std::chrono::minutes(1); + else if ((end = strptime(s, "%H", &tm)) != nullptr) + precision = std::chrono::hours(1); else throw std::runtime_error("Failed to parse time of day"); diff --git a/test/TestISO8601.cxx b/test/TestISO8601.cxx index 6b2506cce..3305b47de 100644 --- a/test/TestISO8601.cxx +++ b/test/TestISO8601.cxx @@ -62,6 +62,10 @@ static constexpr struct { { "2019-02-04T16:46", 1549298760, std::chrono::minutes(1) }, { "2019-02-04T16:46Z", 1549298760, std::chrono::minutes(1) }, + /* without minutes */ + { "2019-02-04T16", 1549296000, std::chrono::hours(1) }, + { "2019-02-04T16Z", 1549296000, std::chrono::hours(1) }, + /* with time zone */ { "2019-02-04T16:46:41+02", 1549291601, std::chrono::seconds(1) }, { "2019-02-04T16:46:41+0200", 1549291601, std::chrono::seconds(1) },