獲取本地時間
typedef struct _SYSTEMTIME { WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
1.GetLocalTime獲取的是本地時區時間
SYSTEMTIME localSysTime;
GetLocalTime(&localSysTime);
- 1
- 2
2.GetSystemTime獲取的是UTC時間
SYSTEMTIME utcSysTime;
GetSystemTime(&utcSysTime);
- 1
- 2
Note:
UTC(Universal Time Coordinated),協調世界時,又稱世界標准時間或世界協調時間.
UTC與格林尼治平均時一樣,都與英國倫敦的本地時相同.
整個地球分為二十四個時區,每個時區都有自己的本地時間.
北京時區是東八區,領先UTC八個小時.(UTC+8)
倫敦時間為UTC+0.
也就是說,若全球標准時間是2012-07-04 00:00:00,則北京時間為2012-07-04 08:00:00.
3.UTC時間和具體時區時間的轉換
<1> UTC Time –> Local Time
BOOL WINAPI SystemTimeToTzSpecificLocalTime(
__in LPTIME_ZONE_INFORMATION lpTimeZone, __in LPSYSTEMTIME lpUniversalTime, __out LPSYSTEMTIME lpLocalTime );
- 1
- 2
- 3
- 4
- 5
lpTimeZone
A pointer to a TIME_ZONE_INFORMATION structure that specifies the time zone of interest.
If lpTimeZone is NULL, the function uses the currently active time zone.
所以將lpTimeZone設為NULL就會將UTC時間轉換為本地時間
<2> Local Time –> UTC Time
BOOL WINAPI TzSpecificLocalTimeToSystemTime(
__in LPTIME_ZONE_INFORMATION lpTimeZoneInformation, __in LPSYSTEMTIME lpLocalTime, __out LPSYSTEMTIME lpUniversalTime );
- 1
- 2
- 3
- 4
- 5
類同.
File Time
我們在Windows系統中獲取文件的創建時間,存取時間,修改時間可以使用下面的API.
BOOL WINAPI GetFileTime(
__in HANDLE hFile, __out LPFILETIME lpCreationTime, __out LPFILETIME lpLastAccessTime, __out LPFILETIME lpLastWriteTime );
- 1
- 2
- 3
- 4
- 5
- 6
獲取的時間為UTC FILETIME.
typedef struct _FILETIME { DWORD dwLowDateTime; DWORD dwHighDateTime; } FILETIME, *PFILETIME;
- 1
- 2
- 3
- 4
Contains a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601.
表示從時間1601-06-01起的100納秒間隔數.
對於時間的顯示,使用SYSTEMTIME為好.
而對於時間的計算&比較,使用FILETIME為好.
Note:使用GetFileTime獲取的FILETIME為UTC FILETIME.
FILETIME比較函數:
LONG WINAPI CompareFileTime( __in const FILETIME* lpFileTime1, __in const FILETIME* lpFileTime2 );
- 1
- 2
- 3
- 4
-1— First file time is earlier than second file time.
0 —- First file time is equal to second file time.
1 —- First file time is later than second file time.
FILETIME <–> SYSTEMTIME
FileTimeToSystemTime
SystemTimeToFileTime
FileTimeToLocalFileTime
LocalFileTimeToFileTime
對於利用GetFileTime獲取的UTC FILETIME怎樣轉換為Local SYSTEMTIME
GetFileTime–>UTC FILETIME–>(FileTimeToSystemTime)–>UTC SYSTEMTIME–>(SystemTimeToTzSpecificLocalTime)–>Local SYSTEMTIME
GetFileTime–>UTC FILETIME–>(FileTimeToLocalFileTime)–>Local FILETIME–>(FileTimeToSystemTime)–>Local SYSTEMTIME
時間間隔的運算
將FILETIME–>LARGE_INTEGER,再通過LARGE_INTEGER進行運算
typedef union _LARGE_INTEGER { struct { DWORD LowPart; LONG HighPart; }; struct { DWORD LowPart; LONG HighPart; } u; LONGLONG QuadPart; } LARGE_INTEGER, *PLARGE_INTEGER;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
eg:
FILETIME time1; FILETIME time2; LARGE_INTEGER liTime1; LARGE_INTEGER liTime2; liTime1.LowPart = time1.dwLowDateTime; liTime1.HighPart = time1.dwHighDateTime; liTime2.LowPart = time2.dwLowDateTime; liTime2.HighPart = time2.dwHighDateTime; LARGE_INTEGER liElapsedTime; liElapsedTime.QuadPart = liTime2.QuadPart - liTime1.QuadPart; liElapsedTime.QuadPart /= 10000000; //相差的秒數
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
時間的轉換公式:
1微秒 = 1000 納秒
1毫秒 = 1000 微秒
1秒 = 1000毫秒
http://blog.csdn.net/hisinwang/article/details/45116133