метка времени микросекунды c / c ++

Я использовал этот кусок кода, чтобы получить метку времени в микросекундах в c / c ++. но это не похоже на микросекунду. также я не знаю, есть ли способ отформатировать его.

timeval curTime;
gettimeofday(&curTime, NULL);
int milli = curTime.tv_usec / 1000;
unsigned long micro = curTime.tv_usec*(uint64_t)1000000+curTime.tv_usec;

char buffer [80];
//localtime is not thread safe
strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", localtime(&curTime.tv_sec));

char currentTime[84] = "";
char currentTime2[80] = "";
sprintf(currentTime, "%s:%3d", buffer, milli);
sprintf(currentTime2, "%s:%Lu", buffer, micro);
printf("time %s, hptime %s\n", currentTime, currentTime2);

и какой правильный формат для его вывода? Спасибо!

1

Решение

Типичный формат печати для секундного времени использует десятичный индикатор (. во многих регионах) и так 59, а некоторые секунды могут выглядеть как 59.00013.

micro переменная, которую вы создали, получает текущий счетчик микросекунд, умножает его на 1000000, затем снова добавляет текущий счетчик микросекунд; Я ожидаю, что вы намереваетесь использовать счетчик микросекунд отдельно или вместе с количеством секунд:

unsigned long micro = curTime.tv_usec*(uint64_t)1000000+curTime.tv_usec;

должно быть написано как

unsigned long micro = curTime.tv_sec*(uint64_t)1000000+curTime.tv_usec;

чтобы получить секунды и микросекунды вместе в одном числе.

Чтобы записать это в свой вывод, вы можете подумать об изменении строки

sprintf(currentTime2, "%s:%Lu", buffer, micro);

в

sprintf(currentTime2, "%s.%Lu", buffer, curTime.tv_usec);

Используя измененный micro определение, вы также можете вывести

sprintf(currentSeconds, "%.6f", micro / 1000000);
2

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

Что-то немного короче, чтобы попробовать (C ++):

__int64 microseconds_since_epoch = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
2

С помощью Бесплатная библиотека Говарда Хиннанта с открытым исходным кодом и заголовком только для даты и времени:

#include "date/date.h"#include <iostream>

int
main()
{
using namespace date;
using namespace std;
using namespace std::chrono;
cout << floor<microseconds>(system_clock::now()) << '\n';
}

который просто вывод для меня:

2017-09-29 15:46:27.793195
1
По вопросам рекламы [email protected]