是否有方法將std :: chrono :: high_resolution_clock :: now()時間輕鬆轉換爲Windows文件時間(https://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx)(和後面)?我不知道如何處理這個...如何將std :: chrono :: high_resolution_clock :: now()轉換爲Windows文件時間(和反向轉換)
非常感謝!
是否有方法將std :: chrono :: high_resolution_clock :: now()時間輕鬆轉換爲Windows文件時間(https://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx)(和後面)?我不知道如何處理這個...如何將std :: chrono :: high_resolution_clock :: now()轉換爲Windows文件時間(和反向轉換)
非常感謝!
您可以將time_point
轉換爲time_t
,然後使用以下函數將其轉換爲FILETIME。
std::time_t t;
t = to_time_t(std::chrono::high_resolution_clock::now());
然後轉換爲FILETIME(https://msdn.microsoft.com/en-us/library/windows/desktop/ms724228%28v=vs.85%29.aspx)
#include <windows.h>
#include <time.h>
void TimetToFileTime(time_t t, LPFILETIME pft)
{
LONGLONG ll = Int32x32To64(t, 10000000) + 116444736000000000;
pft->dwLowDateTime = (DWORD) ll;
pft->dwHighDateTime = ll >>32;
}
此外,請記住在Windows上high_resolution_clock
被實現爲不那麼高清晰度system_clock
這似乎是正確的解決方案:
FILETIME fileTime = { 0 };
long long timePointTmp = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count() * 10 + 116444736000000000;
fileTime.dwLowDateTime = (unsigned long)timePointTmp;
fileTime.dwHighDateTime = timePointTmp >> 32;
謝謝,我找到了一個解決方案基於你和http:// stackoverflow.com/questions/21050994/stdchrono-default-duration-for-time-since-epoch,它也可以用於system_clock,它比std :: time_t更精確,因爲std :: time_t表示以秒爲單位的時間。 – Dom
VS 2015將修復high_resolution_clock :) – melak47