add the helper for the UTC time and mach checks

This commit is contained in:
Sven Czarnian
2021-11-22 16:17:07 +01:00
parent 09e29afe7b
commit 9f80ce1631
2 changed files with 123 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
/*
* @brief Defines and implements functions to handle timestamps
* @file helper/UtcTime.h
* @author Sven Czarnian <devel@svcz.de>
* @copyright Copyright 2020-2021 Sven Czarnian
* @license This project is published under the GNU General Public License v3 (GPLv3)
*/
#pragma once
#include <ctime>
#include <chrono>
#include <sstream>
#include <string>
#include <iomanip>
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<std::chrono::utc_clock>::max)() != time) {
std::stringstream stream;
stream << std::format("{0:" + format + "}", time);
return stream.str();
}
else {
return "";
}
}
};
}