How to convert a windows FILETIME to a std::chrono::time_point<std::chrono::file_clock> in C++

1.3k views Asked by At

I'm looking for a way to convert a Windows FILETIME structure to a std::chrono::time_point< std::chrono::file_clock> so that I can build a difference between two file times and express that duration f.e. in std::chrono::microseconds.

EDIT: Here is a complete godbolt example of Howard's Answer.

1

There are 1 answers

4
Howard Hinnant On BEST ANSWER

Disclaimer: I don't have a Windows system to test on.

I believe that one just needs to take the high and low words of the FILETIME and interpret that 64 bit integral value as the number of tenths of a microsecond since the std::chrono::file_clock epoch:

FILETIME ft = ...
file_clock::duration d{(static_cast<int64_t>(ft.dwHighDateTime) << 32)
                                           | ft.dwLowDateTime};
file_clock::time_point tp{d};

Both the units and the epoch of FILETIME and file_clock (on Windows) are identical.