Chilkat Email Components Home

FileTimeToDosDateTime Source Code

Back

The FileTimeToDosDateTime function is missing on the Pocket PC. Use this as a replacement...
BOOL
FileTimeToDosDateTime(
                    const FILETIME *lpFileTime,
                    LPWORD lpFatDate,
		    LPWORD lpFatTime )
{
    *lpFatDate = 0;
    *lpFatTime = 0;

    BOOL bRetVal = FALSE;

    /* Sanity checks. */
    if ( !lpFileTime || !lpFatDate || !lpFatTime )
    {
	return 0;
    }
    else
    {
        /* Do conversion. */
        SYSTEMTIME SysTime;
        if ( FileTimeToSystemTime( lpFileTime, &SysTime ) )
        {
            if ( SysTime.wYear >= 1980 && SysTime.wYear <= 2037 )
            {
                *lpFatDate = 0;
                *lpFatTime = 0;

                *lpFatDate |= ( SysTime.wDay & 0x1F );
                *lpFatDate |= ( ( SysTime.wMonth & 0xF ) << 5 );
                *lpFatDate |= ( ( ( SysTime.wYear - 1980 ) & 0x7F ) << 9 );

                if ( SysTime.wSecond % 2 == 0 )
                {
                    *lpFatTime |= ( ( SysTime.wSecond / 2 )  & 0x1F );
                }
                else
                {
                    *lpFatTime |= ( ( SysTime.wSecond / 2 + 1 )  & 0x1F );
                }

                *lpFatTime |= ( ( SysTime.wMinute & 0x3F ) << 5 );
                *lpFatTime |= ( ( SysTime.wHour & 0x1F ) << 11 );
                
                bRetVal = TRUE;
            }
            else
            {
                bRetVal = 0;
            }
        }
        else
        {
            bRetVal = FALSE;
        }
    }

    return bRetVal;
}