Я использовал этот кусок кода, чтобы получить метку времени в микросекундах в 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);
и какой правильный формат для его вывода? Спасибо!
Типичный формат печати для секундного времени использует десятичный индикатор (.
во многих регионах) и так 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);
Что-то немного короче, чтобы попробовать (C ++):
__int64 microseconds_since_epoch = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
#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