From 82963f0a7a4ad477d5778d0fc6b445a6059269f6 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Fri, 18 Dec 2020 16:07:18 +0100 Subject: [PATCH] Fix time to string in armem --- source/RobotAPI/libraries/armem/core/Time.cpp | 7 ++++-- source/RobotAPI/libraries/armem/core/Time.h | 2 +- .../libraries/armem/test/ArmemMemoryTest.cpp | 23 +++++++++++++++++-- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/source/RobotAPI/libraries/armem/core/Time.cpp b/source/RobotAPI/libraries/armem/core/Time.cpp index 40f25dc9f..ce0bc6be6 100644 --- a/source/RobotAPI/libraries/armem/core/Time.cpp +++ b/source/RobotAPI/libraries/armem/core/Time.cpp @@ -1,6 +1,7 @@ #include "Time.h" #include <cmath> +#include <iomanip> namespace armarx @@ -14,7 +15,8 @@ namespace armarx if (decimals > 0) { int div = int(std::pow(10, 3 - decimals)); - ss << "." << (time.toMicroSeconds() % 1000) / div; + ss << "." << std::setfill('0') << std::setw(decimals) + << (time.toMicroSeconds() % 1000) / div; } ss << " ms"; return ss.str(); @@ -37,7 +39,8 @@ namespace armarx if (decimals > 0) { int div = int(std::pow(10, 6 - decimals)); - ss << "." << (time.toMicroSeconds() % int(1e6)) / div; + ss << "." << std::setfill('0') << std::setw(decimals) + << (time.toMicroSeconds() % int(1e6)) / div; } return ss.str(); diff --git a/source/RobotAPI/libraries/armem/core/Time.h b/source/RobotAPI/libraries/armem/core/Time.h index 01a420f14..6f743b741 100644 --- a/source/RobotAPI/libraries/armem/core/Time.h +++ b/source/RobotAPI/libraries/armem/core/Time.h @@ -21,7 +21,7 @@ namespace armarx::armem std::string toStringMicroSeconds(const Time& time); /** - * @brief Returns `time`as e.g. "2020-11-16 17:01:54.123". + * @brief Returns `time`as e.g. "2020-11-16 17:01:54.123456". * @param decimals How many sub-second decimals to include. */ std::string toDateTimeMilliSeconds(const Time& time, int decimals = 6); diff --git a/source/RobotAPI/libraries/armem/test/ArmemMemoryTest.cpp b/source/RobotAPI/libraries/armem/test/ArmemMemoryTest.cpp index 07d3d98dd..2042ac952 100644 --- a/source/RobotAPI/libraries/armem/test/ArmemMemoryTest.cpp +++ b/source/RobotAPI/libraries/armem/test/ArmemMemoryTest.cpp @@ -37,7 +37,7 @@ namespace aron = armarx::aron; BOOST_AUTO_TEST_CASE(test_time_to_string) { - // 1: seconds, 2: milliseconds, 3: microseconds + // 111111: seconds, 345: milliseconds, 789: microseconds armem::Time time = armem::Time::microSeconds(111111345789); BOOST_CHECK_EQUAL(armem::toStringMilliSeconds(time), "111111345.789 ms"); @@ -48,10 +48,29 @@ BOOST_AUTO_TEST_CASE(test_time_to_string) BOOST_CHECK_EQUAL(armem::toStringMicroSeconds(time), "111111345789 " "\u03BC" "s"); - BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time), "1970-01-02 07:51:51.345"); + BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time), "1970-01-02 07:51:51.345789"); BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time, 0), "1970-01-02 07:51:51"); BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time, 3), "1970-01-02 07:51:51.345"); BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time, 6), "1970-01-02 07:51:51.345789"); + + // 111111: seconds, 000: milliseconds, 789: microseconds + time = armem::Time::microSeconds(111111000789); + BOOST_CHECK_EQUAL(armem::toStringMilliSeconds(time), "111111000.789 ms"); + BOOST_CHECK_EQUAL(armem::toStringMicroSeconds(time), "111111000789 " "\u03BC" "s"); + BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time), "1970-01-02 07:51:51.000789"); + BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time, 0), "1970-01-02 07:51:51"); + BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time, 3), "1970-01-02 07:51:51.000"); + BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time, 6), "1970-01-02 07:51:51.000789"); + + + // 111111: seconds, 345: milliseconds, 000: microseconds + time = armem::Time::microSeconds(111111345000); + BOOST_CHECK_EQUAL(armem::toStringMilliSeconds(time), "111111345.000 ms"); + BOOST_CHECK_EQUAL(armem::toStringMicroSeconds(time), "111111345000 " "\u03BC" "s"); + BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time), "1970-01-02 07:51:51.345000"); + BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time, 0), "1970-01-02 07:51:51"); + BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time, 3), "1970-01-02 07:51:51.345"); + BOOST_CHECK_EQUAL(armem::toDateTimeMilliSeconds(time, 6), "1970-01-02 07:51:51.345000"); } -- GitLab