Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions lib/winapi/timezoneapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -296,3 +296,29 @@ BOOL FileTimeToLocalFileTime (const FILETIME *lpFileTime, LPFILETIME lpLocalFile
lpLocalFileTime->dwHighDateTime = fileTime.HighPart;
return TRUE;
}

BOOL LocalFileTimeToFileTime (const FILETIME *lpLocalFileTime, LPFILETIME lpFileTime)
{
if (!lpLocalFileTime || !lpFileTime) {
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}

TIME_ZONE_INFORMATION timeZoneInformation;
GetTimeZoneInformation(&timeZoneInformation);

// Get the timezone offset bias in 100-nanosecond intervals
LARGE_INTEGER offset;
offset.QuadPart = timeZoneInformation.Bias;
offset.QuadPart *= 60LL * 10000000LL;

LARGE_INTEGER localFileTime;
localFileTime.LowPart = lpLocalFileTime->dwLowDateTime;
localFileTime.HighPart = lpLocalFileTime->dwHighDateTime;

localFileTime.QuadPart += offset.QuadPart;

lpFileTime->dwLowDateTime = localFileTime.LowPart;
lpFileTime->dwHighDateTime = localFileTime.HighPart;
return TRUE;
}
1 change: 1 addition & 0 deletions lib/winapi/timezoneapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ DWORD GetTimeZoneInformation (LPTIME_ZONE_INFORMATION lpTimeZoneInformation);
BOOL FileTimeToSystemTime (const FILETIME *lpFileTime, LPSYSTEMTIME lpSystemTime);
BOOL SystemTimeToFileTime (const SYSTEMTIME *lpSystemTime, LPFILETIME lpFileTime);
BOOL FileTimeToLocalFileTime (const FILETIME *lpFileTime, LPFILETIME lpLocalFileTime);
BOOL LocalFileTimeToFileTime (const FILETIME *lpLocalFileTime, LPFILETIME lpFileTime);

#ifdef __cplusplus
}
Expand Down
Loading