Рекомендую использовать библиотеку std :: chrono .Посмотрите на этот пример:
#include <chrono>
#include <ctime>
#include <sstream>
#include <iomanip>
#include <string>
std::string current_datetime()
{
using namespace std::chrono;
// get current time
auto now = high_resolution_clock::now();
// get duration in milliseconds
auto msec = duration_cast<milliseconds>(now.time_since_epoch()).count();
msec %= 1000;
// get printable result:
auto now_time_t = high_resolution_clock::to_time_t(now);
std::stringstream ss;
ss << std::put_time(std::gmtime(&now_time_t), "%d-%m-%Y %X:") << msec;
return ss.str();
}
int main()
{
for(auto i = 0U;i < 1000;i++)
std::cout << current_datetime() << std::endl;
}
Также можно получить микросекунды:
auto mksec = duration_cast<microseconds>(now.time_since_epoch()).count();
mksec %= 1000;
Если вам нужна версия для WinAPI, вот она:
std::string current_datetime2()
{
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
unsigned long long mks = static_cast<unsigned long long>(ft.dwHighDateTime) << 32 | ft.dwLowDateTime;
mks /= 10; // interval in microsecond
mks %= 1000;
SYSTEMTIME st;
FileTimeToSystemTime(&ft, &st);
std::stringstream ss;
ss << st.wDay << "-" << st.wMonth << "-" << st.wYear << " " <<
st.wHour << ":" << st.wMinute << ":" << st.wSecond << ":" << st.wMilliseconds << ":" << mks << std::endl;
return ss.str();
}
илиеще одна очень простая WinAPI-версия, но без микросекунд:
std::string current_datetime3()
{
SYSTEMTIME st;
GetSystemTime(&st);
std::stringstream ss;
ss << st.wDay << "-" << st.wMonth << "-" << st.wYear << " " <<
st.wHour << ":" << st.wMinute << ":" << st.wSecond << ":" << st.wMilliseconds;
return ss.str();
}