WINDOWS API ——GETFILETIME——獲取文件時間

GetSystemTime(LPSYSTEMTIME lpSystemTime)
獲得系統時間,這個時間是標準的UTC時間,也就是沒有包含任什麼時候區的時間的
GetLocalTime(LPSYSTEMTIME lpSystemTime)
獲得當前時區的時間,它獲取的是系統設置的地區的當地時間
函數

 

FILETIME結構包含了文件或目錄的日期和時間信息:(自1601年1月1日以來,單位爲100納秒)spa

typedef struct _FILETIME {

  DWORD dwLowDateTime; //低32位

  DWORD dwHighDateTime; //高32位

} FILETIME, *PFILETIME;

SYSTEMTIME結構包含了用戶可識別的系統日期信息:code

typedef struct _SYSTEMTIME {

    WORD wYear;//

    WORD wMonth;//

    WORD wDayOfWeek;//一週的第幾天

    WORD wDay;//

    WORD wHour;//小時

    WORD wMinute;//

    WORD wSecond;//

    WORD wMilliseconds;//毫秒

} SYSTEMTIME, *PSYSTEMTIME;

 

=======================================================orm

函數FileTimeToSystemTime用來將文件時間格式轉換爲標準系統時間格式:blog

BOOL WINAPI FileTimeToSystemTime(

  __in   const FILETIME *lpFileTime, //文件時間

  __out  LPSYSTEMTIME lpSystemTime //系統時間

);

函數FileTimeToLocalTime用來將文件時間格式轉換爲本地文件時間:ci

 BOOL WINAPI FileTimeToLocalFileTime(
  __in          const FILETIME* lpFileTime,//文件時間
   __out         LPFILETIME lpLocalFileTime//本地文件時間
);

函數SystemTimeToFileTime則是將標準系統時間轉換成文件時間格式:it

BOOL WINAPI SystemTimeToFileTime(
   __in   const SYSTEMTIME *lpSystemTime,//系統時間
   __out  LPFILETIME lpFileTime//文件時間
 );

函數SystemTimeToTzSpecificLocalTime是將標準系統時間轉換爲本地系統時間io

BOOL WINAPI SystemTimeToTzSpecificLocalTime(
 __in          LPTIME_ZONE_INFORMATION lpTimeZone,//時區結構
 __in          LPSYSTEMTIME lpUniversalTime,//系統時間
 __out         LPSYSTEMTIME lpLocalTime//本地時間
);

=======================================================ast

GetSystemTime函數用來得到系統時間:class

 void WINAPI GetSystemTime(
   __out  LPSYSTEMTIME lpSystemTime
 );

 GetFileTime函數用來得到一個文件或目錄的建立的時間、最後訪問的時間以及最後修改的時間:

BOOL WINAPI GetFileTime(
  __in       HANDLE hFile, //文件或目錄句柄
  __out_opt  LPFILETIME lpCreationTime, //返回的建立的日期和時間信息
  __out_opt  LPFILETIME lpLastAccessTime, //返回的最後訪問的日期和時間信息
  __out_opt  LPFILETIME lpLastWriteTime //返回的最後修改的日期和時間信息

);

實例:

CString strPath("D:\\test.txt");
HANDLE hFile = CreateFile(strPath,              
                          GENERIC_WRITE| GENERIC_READ,  //必須有GENERIC_READ屬性才能獲得時間     
                          FILE_SHARE_READ,                      
                          NULL,                   
                          TRUNCATE_EXISTING,         
                          FILE_ATTRIBUTE_NORMAL,
                          NULL);                 

if (hFile != INVALID_HANDLE_VALUE) 
{ 
    SYSTEMTIME sysTime;
    GetSystemTime(&sysTime);//這裏獲得的時間是標準系統時間,也就是0時區的時間。
    GetLocalTime(&sysTime);//這裏獲得的是本地時間,也就是標準時間+時區時間

    FILETIME fCreateTime, fAccessTime, fWriteTime;

    GetFileTime(&hFile, &fCreateTime, &fAccessTime, &fWriteTime);//獲取文件時間

    CString strTime;

//將文件時間轉換爲本地系統時間的兩種方式:
//(1)
    FileTimeToLocalFileTime(&fCreateTime,&localTime);//將文件時間轉換爲本地文件時間
    FileTimeToSystemTime(&localTime, &sysTime);//將文件時間轉換爲本地系統時間

//(2)
    FileTimeToSystemTime(&fCreateTime, &sysTime);//將文件時間轉換爲標準系統時間
    SystemTimeToTzSpecificLocalTime(&sysTime, &sysTime)//將標準系統時間轉換爲本地系統時間

        strTime.Format(_T("%4d年%2d月%2d日,%2d:%2d:%2d"),
        sysTime.wYear,
        sysTime.wMonth,
        sysTime.wDay,
        sysTime.wHour,
        sysTime.wMinute,
        sysTime.wSecond
        );
}

 修文件建立時間,例子:

#include <Windows.h>  
#include <stdio.h>  
  
bool ConvertFileTimeToLocalTime(const FILETIME *lpFileTime, SYSTEMTIME *lpSystemTime)  
{  
    if (!lpFileTime || !lpSystemTime) {  
        return false;  
    }  
    FILETIME ftLocal;  
    FileTimeToLocalFileTime(lpFileTime, &ftLocal);  
    FileTimeToSystemTime(&ftLocal, lpSystemTime);  
    return true;  
}  
  
bool ConvertLocalTimeToFileTime(const SYSTEMTIME *lpSystemTime, FILETIME *lpFileTime)  
{  
    if (!lpSystemTime || !lpFileTime) {  
        return false;  
    }  
  
    FILETIME ftLocal;  
    SystemTimeToFileTime(lpSystemTime, &ftLocal);  
    LocalFileTimeToFileTime(&ftLocal, lpFileTime);  
    return true;  
}  
  
int main()  
{  
    HANDLE hFile;  
    FILETIME ftCreate, ftAccess, ftWrite;  
    SYSTEMTIME stCreate, stAccess, stWrite;  
    int year, month, day;  
  
    hFile = CreateFile(L"C:\\1.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);  
    if (INVALID_HANDLE_VALUE == hFile) {  
        printf("CreateFile error: %d", GetLastError());  
        ExitProcess(0);  
    }  
    GetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite);  
    ConvertFileTimeToLocalTime(&ftCreate, &stCreate);  
    ConvertFileTimeToLocalTime(&ftAccess, &stAccess);  
    ConvertFileTimeToLocalTime(&ftWrite, &stWrite);  
  
    printf("yyyy-MM-dd:");  
    scanf("%d-%d-%d", &year, &month, &day);  
    stAccess.wYear = stWrite.wYear = year;  
    stAccess.wMonth = stWrite.wMonth = month;  
    stAccess.wDay = stWrite.wDay = day;  
  
    ConvertLocalTimeToFileTime(&stAccess, &ftAccess);  
    ConvertLocalTimeToFileTime(&stWrite, &ftWrite);  
  
    SetFileTime(hFile, &ftCreate, &ftAccess, &ftWrite);  
    CloseHandle(hFile);  
    return 0;  
}  
相關文章
相關標籤/搜索