29#if defined( _WIN32 ) && !DOXYGEN
32using filetime_duration = duration<int64_t, std::ratio<1, 10000000> >;
35constexpr duration<int64_t> nt_to_unix_epoch{INT64_C(-11644473600)};
39 const auto asDuration = duration_cast<filetime_duration>(
stamp.time_since_epoch() );
40 const auto withNtEpoch= asDuration - nt_to_unix_epoch;
41 const auto rawCount = withNtEpoch.count();
44 result.dwLowDateTime =
static_cast<DWORD
>(rawCount);
45 result.dwHighDateTime =
static_cast<DWORD
>(rawCount >> 32);
53 ULARGE_INTEGER result;
54 result.HighPart= ft.dwHighDateTime;
55 result.LowPart= ft.dwLowDateTime;
61 const filetime_duration ftDuration { int64_t( (uint64_t( fileTime.dwHighDateTime) << 32)
62 | fileTime.dwLowDateTime ) };
69 fileTime.dwLowDateTime = ft.LowPart;
70 fileTime.dwHighDateTime = ft.HighPart;
79 FileTimeToSystemTime( &ft, &result );
83 FileTimeToSystemTime( &ft, &utc );
84 SystemTimeToTzSpecificLocalTime( NULL, &utc, &result );
93 SystemTimeToFileTime( &st, &ft );
97 TzSpecificLocalTimeToSystemTime( NULL, &st, &utc);
98 SystemTimeToFileTime( &utc, &ft );