proper helper function to get utc time

This commit is contained in:
otavepto 2024-06-07 19:49:57 +03:00
parent 122921bb48
commit 35f4b9c6d7
4 changed files with 30 additions and 11 deletions

View File

@ -52,11 +52,7 @@ static void exception_handler(int signal, siginfo_t *info, void *context, struct
std::ofstream file(logs_filepath, std::ios::app); std::ofstream file(logs_filepath, std::ios::app);
auto now = std::chrono::system_clock::now(); std::string time(common_helpers::get_utc_time());
auto t_now = std::chrono::system_clock::to_time_t(now);
auto gm_time = std::gmtime(&t_now);
auto time = std::string(std::asctime(gm_time));
time.pop_back(); // remove the trailing '\n' added by asctime
common_helpers::write(file, "[" + time + "]"); common_helpers::write(file, "[" + time + "]");
{ {
std::stringstream ss{}; std::stringstream ss{};

View File

@ -106,12 +106,7 @@ static void log_exception(LPEXCEPTION_POINTERS ex_pointers)
std::ofstream file(std::filesystem::path(logs_filepath), std::ios::app); std::ofstream file(std::filesystem::path(logs_filepath), std::ios::app);
auto now = std::chrono::system_clock::now(); std::string time(common_helpers::get_utc_time());
auto t_now = std::chrono::system_clock::to_time_t(now);
auto gm_time = std::gmtime(&t_now);
auto asc_time = std::asctime(gm_time);
auto time = std::string(asc_time ? asc_time : "");
time.pop_back(); // remove the trailing '\n' added by asctime
common_helpers::write(file, "[" + time + "]"); common_helpers::write(file, "[" + time + "]");
{ {
std::stringstream ss{}; std::stringstream ss{};

View File

@ -5,6 +5,11 @@
#include <cctype> #include <cctype>
#include <random> #include <random>
// for gmtime_s()
#define __STDC_WANT_LIB_EXT1__ 1
#include <time.h>
namespace common_helpers { namespace common_helpers {
KillableWorker::KillableWorker( KillableWorker::KillableWorker(
@ -407,3 +412,24 @@ size_t common_helpers::rand_number(size_t max)
return distrib(gen); return distrib(gen);
} }
std::string common_helpers::get_utc_time()
{
// https://en.cppreference.com/w/cpp/chrono/c/strftime
std::time_t time = std::time({});
std::tm utc_time{};
bool is_ok{};
#if defined(__GNUC__) || defined(POSIX)
is_ok = !!gmtime_s(&time, &utc_time);
#else
is_ok = !gmtime_s(&utc_time, &time);
#endif
std::string time_str(4 +1 +2 +1 +2 +3 +2 +1 +2 +1 +2 +1, '\0');
if (is_ok) {
constexpr const static char fmt[] = "%Y/%m/%d - %H:%M:%S";
size_t chars = std::strftime(&time_str[0], time_str.size(), fmt, &utc_time);
time_str.resize(chars);
}
return time_str;
}

View File

@ -101,4 +101,6 @@ bool dir_exist(const std::wstring &dirpath);
// between 0 and max, 0 and max are included // between 0 and max, 0 and max are included
size_t rand_number(size_t max); size_t rand_number(size_t max);
std::string get_utc_time();
} }