【发布时间】:2016-10-17 15:38:38
【问题描述】:
我需要以可打印格式获取当前 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);
尽管您可以看到这并没有将它降低到毫秒。如果我需要,我可以自己格式化字符串,只要我能以某种方式获得毫秒值。
【问题讨论】:
-
您将无法从
std::tm对象获得毫秒数--they don't store that information -
github.com/HowardHinnant/date/wiki/…#research
-
Linux上
gettimeofday()可以给usec解析;在 Windows 上,有GetLocalTime(),它返回 ms 分辨率(或GetSystemTime用于 UTC)。 -
time_t 最多只能处理几秒钟,但每增加一秒都会触发一个计数器线程,该线程使用 std::chrono 最多可以计数 1000 毫秒,其值可以在主线程中打印。
-
我已经更新了我的答案 (stackoverflow.com/a/12844843/576911) 来专门回答这个问题。