我需要以可打印的格式将当前的UTC日期缩短到c ++ 11中的毫秒数。我需要在Windows和Linux上运行,因此首选跨平台代码。如果这是不可能的,我可以编写两个单独的实现。
这就是我的尝试:
std::chrono::time_point<std::chrono::high_resolution_clock> time = std::chrono::system_clock::now();
std::time_t tt = std::chrono::high_resolution_clock::to_time_t(time);
struct tm* utc = nullptr;
gmtime_s(utc, &tt);
char buffer[256];
std::strftime(buffer, sizeof(buffer), "%Y-%m-%dT-%H:%M:%S. %MILLESECONDS???, utc);
虽然你可以看到这并没有达到毫秒。如果我需要,我可以自己格式化字符串,只要我能以某种方式获得毫秒值。
答案 0 :(得分:2)
time_t仅包含秒,因此您可以使用std :: chrono函数获得更高的精度:
#include <iostream>
#include <chrono>
int main()
{
typedef std::chrono::system_clock clock_type;
auto now = clock_type::now();
auto seconds = std::chrono::time_point_cast<std::chrono::seconds>(now);
auto fraction = now - seconds;
time_t cnow = clock_type::to_time_t(now);
auto milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>(fraction);
std::cout << "Milliseconds: " << milliseconds.count() << '\n';
}