разница — Сравнение двух строк меток времени в переполнении стека

У меня есть две метки времени, хранящиеся в виде строковых переменных. Метки времени имеют формат дд / мм / гггг-чч: мм: сс
Я пытаюсь найти разницу в секундах между двумя временными метками (игнорируя даты).

(Я не назначил строки a и b, но каждая из них содержит временную метку)

Он всегда выводит 0 для разницы в количестве секунд, и я не могу понять, почему.

std::string a, b; // hold timestamps
struct tm t, t1;
double seconds;

t.tm_hour = stoi(a.substr(11,2)); // stoi() cast substring to int
t.tm_min = stoi(a.substr(14,2));
t.tm_sec = stoi(a.substr(17,2));

t1.tm_hour = stoi(b.substr(11,2));
t1.tm_min = stoi(b.substr(14,2));
t1.tm_sec = stoi(b.substr(17,2));

seconds = difftime(mktime(&t1), mktime(&t));
std::cout<<seconds;

0

Решение

Добавьте следующий код после определений и перед присвоениями

// initialize time structures with all the details for 'now'
time_t ts;
time( &ts );
t = * localtime( &ts );
t1 = t;
0

Другие решения

Не используйте жестко заданные значения подстрок (1 минута против 11 минут может заставить вас отключиться, если нотация 01 не используется … и у вас есть также месяцы, дни и часы, которые следует учитывать).

Вместо того, чтобы жестко задавать смещение, попробуйте перейти к уникальным символам (чтобы получить «секунды», учитывайте единственную строку после 2-го вхождения «:»).

1

Я предлагаю использовать CTime для работы с меткой времени.

http://www.cplusplus.com/reference/ctime/

Вы можете использовать это для хранения и позже, если вам нужно, преобразовать в строку.

0

Это было бы отличной причиной, чтобы начать с Увеличение библиотеки, потому что Boost.Date_Time имеет именно то, что вам нужно. Смотрите документацию о продолжительность времени.

Вот пример программы:

#include <boost/date_time/posix_time/posix_time.hpp>
#include <iostream>

int main()
{
boost::posix_time::time_duration duration1 = boost::posix_time::duration_from_string("10:11:12");
boost::posix_time::time_duration duration2 = boost::posix_time::duration_from_string("10:12:15");

std::cout << (duration2 - duration1).total_seconds() << "\n";
}

Выход: 63

Поскольку вы уже используете substr а также std::stoi, вам должно быть легко получить правильные подстроки из a а также b быть переданным boost::posix_time::duration_from_string,

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector