Преобразование секунд в метку времени UNIX в C ++ - PullRequest
0 голосов
/ 05 января 2012

Вот мой код, который должен отображать две полные даты после передачи временных меток:

#include <iostream>
#include <fstream>
#include <time.h>
#include <string>

using namespace std;

int main (int argc, char* argv[])
{

    time_t startTime_t = (time_t) argv[1];
    time_t endTime_t = (time_t) argv[2];

    cout << argv[1] << endl << argv[2] << endl;
    cout << startTime_t << endl << endTime_t << endl;

    string startTime = asctime(localtime(&startTime_t));
    string endTime = asctime(localtime(&endTime_t));

    cout << startTime << endl << endTime << endl;

    return 0;
}

Я делаю что-то не так с преобразованием секунд в time_t, как вы можете видеть из этого вывода:

$ ./a 1325783860 1325791065
1325783860
1325791065
1629762852
1629763900
Mon Aug 23 19:54:12 2021

Mon Aug 23 20:11:40 2021

Для справки:

$ date -d @1325783860
Thu Jan  5 12:17:40 EST 2012

1 Ответ

3 голосов
/ 05 января 2012

Вы не можете просто привести строковый указатель к time_t.Используйте atol (), чтобы получить long из вашей строки, а затем приведите его к time_t.

Возвращаемые значения - это арифметическое значение указателя, интерпретируемое как время, или, по сути, случайное.

...