Konkret geht´s darum, das spdlog seine Meldungen bei uns mit falschen Zeitstempeln ausgibt. Intern wird der Zeitstempel per std::chrono::system_clock::now() erzeugt und bei der Ausgabe vom pattern_formatter angeblich nach localtime konvertiert und formatiert. Man kann den Formatter anweisen, entweder local oder utc zu benutzen. Die utc-Ausgabe für 17:30 MEZ ist richtig 16:30, die local-Ausgabe mit 18:30 liegt um 1h falsch.
Ich hab mich dann mal etwas mit std::chrono::system_clock beschäftigt und verstehe den Zeitstempel, denstd::chrono::system_clock::now() zurückgibt, nicht:
#include <ctime>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
char time_zone[] = "TZ=CET-1CEST";
putenv( time_zone );
tzset();
struct tm tm_gm; // 59, 29, 16, 12, 2, 119, 2, 70, 1 => 16:29:59 12.03.2019 (ok)
struct tm tm_lc; // 59, 29, 17, 12, 2, 119, 2, 70, 1 => 17:29:59 12.03.2019 (ok)
time_t time_now = time( nullptr ); // 1552404599
time_t time_lc = mktime( localtime_s( &time_now, &tm_lc ) ); // 1552404599
time_t time_gm = mktime( gmtime_s( &time_now, &tm_gm ) ); // 1552400999
time_t chrono_utc = system_clock::to_time_t( system_clock::now() ); // 1552408199
int diff_lc_chrono = time_lc - chrono_utc; // -3600 ???
int diff_lc_gm = time_lc - time_gm; // 3600
int diff_chrono_lc = chrono_utc - time_lc; // 3600 ???
int diff_chrono_gm = chrono_utc - time_gm; // 7200 ???
}
Hier das Ergebnis auf Ideone
Sieht so aus als wäre die RAD Studio Implementation kaputt