2015-04-01 3 views
0

Мне интересно, какой самый дешевый способ получить временную метку в Linux (на C++).
Я предполагаю, что это точность торговли, поэтому я считаю, что существует более одной возможности.
Мне нужно иметь миллисекунды, но необязательно microseconds, поэтому std::localtime не является вариантом, а gettimeofday, вероятно, слишком дорогостоящим. (из-за точности микросекунд).«Самый дешевый» способ получить отметку времени в Linux (C++)

+0

ли вы имеете в виду в Баш/консоли или в C++? –

+0

C++, отредактировал que – SagiLow

+0

Мы не можем ответить, пока вы не уточните, что вы имеете в виду под «самым дешевым». Обычный метод штамповки - использовать gettimeofday() и преобразовывать ответ в миллисекунды: ((tv_sec * 1000) + (tv_usec/1000)) или микросекунды: (tv_sec * 1000000 + tv_usec). РЕДАКТИРОВАТЬ: убедитесь, что вы используете долгое время для ответа на эти два вопроса. – guilleamodeo

ответ

0

Я хотел бы предложить CTIME библиотеки и следующий код:

std::time_t timestamp = std::time(nullptr); 
    std::cout << std::asctime(std::localtime(&result)) 
       << result << " seconds since the Epoch\n"; 

Это вернет в «результате» переменное количество секунд, прошедшее с началом Эпохи (довольно прямо вперед). Есть способы конвертировать это в удобочитаемый формат, но, как вы сказали, стоит дорого. Получение этого числа было бы очень эффективным, поскольку оно только считывало переменную из системы вместо преобразования/конкатенации и вычисления читаемой даты.

+0

Спасибо, я думаю, это самый дешевый, но мне нужно лучшее разрешение, чем секунды (миллисекунды, я думаю?) – SagiLow

1

1: fprintf(stdout, "%u\n", (unsigned)time(NULL));

2: struct timeval tv; gettimeofday(&tv,NULL); tv.tv_sec // seconds tv.tv_usec // microseconds

3: std::time_t result = std::time(nullptr); std::cout << std::asctime(std::localtime(&result)) << result << " seconds since the Epoch\n";

4:

using namespace std::chrono; 
milliseconds ms = duration_cast<milliseconds>(
    high_resolution_clock::now().time_since_epoch() 
);` 
+0

Спасибо за ваш ответ, второй совсем не дешев, последний такой же, как и в первом ответе и содержит только секунды, и я не уверен, что понимаю первые) ... – SagiLow

+0

@SagiLow try chrono – user3013807

+0

плохо посмотрите, спасибо! – SagiLow

Смежные вопросы