【发布时间】:2015-07-08 06:25:14
【问题描述】:
我有一个“人类可读”变量hours、minutes、seconds、day、month、year,其中包含与其名称相对应的值(让我们假设我有来自<windows.h> 的SYSTEMTIME 结构。
我发现创建chrono::time_point 的唯一方法是:
SYSTEMTIME sysTime = ...; // Came from some source (file, network, etc. )
tm t;
t.tm_sec = sysTime.wSecond;
t.tm_min = sysTime.wMinute;
t.tm_hour = sysTime.wHour;
t.tm_mday = sysTime.wDay;
t.tm_mon = sysTime.wMonth - 1;
t.tm_year = sysTime.wYear - 1900;
t.tm_isdst = 0;
std::chrono::system_clock::time_point dateTime =
std::chrono::system_clock::from_time_t( mktime( & t ) );
首先,我从SYSTEMTIME 损失了一毫秒。
其次,(嗯...)我不喜欢这种转换))
你能给出一个更优雅的方式来解决这个问题吗?
【问题讨论】:
-
如果您有实际
SYSTEMTIME,请参阅SystemTimeToFileTime()。 -
@MSalters
SystemTimeToFileTime()给了我自 1601 年 1 月 1 日以来的 100 纳秒间隔,但我需要chrono::time_point -
是的。但这稍微简化了数学。获取 1-1-2000 的 FILETIME 和
chrono::time_point(以防止超出范围的问题 - 您可以执行一次),从当前时间中减去该 FILETIME,乘以 10 得到微秒,然后将这些微秒添加到 1 -1-2000 时间点