Я пишу приложение C ++ на встроенном устройстве ARM под управлением Embedded Linux.
Я пытаюсь преобразовать строку даты и времени в секунды, вычесть ее из текущего времени в секундах и принять меры, если количество прошедших секунд больше определенного числа.
То, что должно быть довольно простым в реализации, оказалось довольно сложным, и я не уверен, почему.
Разница во времени, которую я вычисляю, оказывается огромной величиной, хотя на самом деле она должна быть небольшой. См. Мой код ниже. Я вручную жестко кодирую строку времени и даты для тестирования.
std::string timestr = "2020-12-21T16:07:00";
struct tm t = {0};
sscanf(timestr.c_str(), "%04d-%02d-%02dT%02d:%02d:%02d",
&t.tm_year, &t.tm_mon, &t.tm_mday,
&t.tm_hour, &t.tm_min, &t.tm_sec);
t.tm_year -= 1900; // This is required because my year should be the number of years since 1900
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&t));
auto now = std::chrono::system_clock::now();
auto now_s = std::chrono::time_point_cast<std::chrono::seconds>(now);
auto tp_s = std::chrono::time_point_cast<std::chrono::seconds>(tp);
std::chrono::duration<double> diff = now-tp; // Huge number
auto elapsed = now_s - tp_s; // This value is massive and not as expected when printed out