/* * @brief Defines and implements functions to handle timestamps * @file helper/UtcTime.h * @author Sven Czarnian * @copyright Copyright 2020-2021 Sven Czarnian * @license This project is published under the GNU General Public License v3 (GPLv3) */ #pragma once #include #include #include #include #include namespace aman { /** * @brief Defines helper functions to handle system timestamps and UTC timestamps * @ingroup helper */ class UtcTime { public: using Point = std::chrono::utc_clock::time_point; UtcTime() = delete; UtcTime(const UtcTime&) = delete; UtcTime(UtcTime&&) = delete; UtcTime& operator=(const UtcTime&) = delete; UtcTime& operator=(UtcTime&&) = delete; /** * @brief Returns the current time in UTC * @return The current UTC time */ static __inline Point currentUtc() { return std::chrono::utc_clock::now(); } /** * @brief Converts a string into a std::chrono::system_clock::time_point in UTC * @param[in] date The string containing the timepoint * @return The converted time */ static __inline Point stringToTime(const std::string& date) { Point retval; std::stringstream stream(date); std::chrono::from_stream(stream, "%Y-%m-%d %X", retval); return retval; } /** * @brief Converts a time point into a string * The function converts into the following format: * - %y%m%d%H%M * @param[in] time The timepoint which needs to be converted in UTC * @return The converted time */ static __inline std::string timeToString(const Point& time, const std::string& format = "%Y-%m-%d %X") { if ((std::chrono::time_point::max)() != time) { std::stringstream stream; stream << std::format("{0:" + format + "}", time); return stream.str(); } else { return ""; } } }; }