2.1.8.8 FileTimeToDosDateTime


Description

converts a 64-bit file time to MS-DOS date and time values

Syntax

BOOL FileTimeToDosDateTime( const FILETIME * lpFileTime, WORD * lpFatDate, WORD * lpFatTime )

Parameters

lpFileTime
[input] File time
lpFatDate
[output]Pointer to a variable to receive the MS-DOS date. The date is a packed 16-bit value with the following format.
Bits Contents
0-4 Day of the month (1-31)
5-8 Month (1 = January, 2 = February, and so on)
9-15 Year offset from 1980 (add 1980 to get actual year)
lpFatTime
[output] Pointer to a variable to receive the MS-DOS time. The time is a packed 16-bit value with the following format.
Bits Contents
0-4 Second divided by 2
5-10 Minute (0-59)
11-15 Hour (0-23 on a 24-hour clock)

Return

If the function succeeds, the return value is true; else return false.

Examples

EX1

int FileTimeToDosDateTime_ex1()
{    
    string                        strFile = "c:\\myfile.txt";
    if(!strFile.IsFile())
    {
        HANDLE hFile = CreateFile(strFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile != INVALID_HANDLE_VALUE)
        {
            CloseHandle(hFile);
        }
    }
    
    WORD            FatDate;
    WORD            FatTime;
    FILETIME         localFiletime;    
    WIN32_FILE_ATTRIBUTE_DATA    fileInfo;    
    
    if(!GetFileAttributesEx(strFile, 0, &fileInfo))
    {
        return 0;
    }
    
    FileTimeToLocalFileTime(&fileInfo.ftLastWriteTime, &localFiletime);    
    FileTimeToDosDateTime(&localFiletime, &FatDate, &FatTime);

    int nYear = ((FatDate/512)& 255) +1980 ;    //9-15  bits
    int nMonth = (FatDate/32) & 15;                //5-8   bits
    int nDay = FatDate & 31;                    //0-4   bits
    
    FILETIME        FileTime;
    DosDateTimeToFileTime(FatDate, FatTime, &FileTime);    
    ASSERT(0 == CompareFileTime(&FileTime, &localFiletime) );
    
    FILETIME    ToFileTime;
    if( LocalFileTimeToFileTime(&fileInfo.ftLastAccessTime,&ToFileTime) )
    {
        ASSERT( 0 != ToFileTime.dwLowDateTime );
        ASSERT( 0 != ToFileTime.dwHighDateTime );
    }    
    return 1;
}

Remark

See Also

DosDateTimeToFileTime

Header to Include

origin.h

Reference