日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Windows API的时间结构体、时间转换及时间获取

發(fā)布時間:2025/3/12 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows API的时间结构体、时间转换及时间获取 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Windows API的時間結(jié)構(gòu)體、時間轉(zhuǎn)換及時間獲取


?

時間格式:DosDateTime <====>FileTime <====> SystemTime

????????????????????| ? ? ????????? |?????????????? |

使用上面??????????LocalFileTime? FileName?? 系統(tǒng)時間和本地時間

格式的時間:??????(本地時區(qū))??? UTC????????

????????????????

?

一.時間結(jié)構(gòu)體

時間結(jié)構(gòu)體1//文件時間格式

typedef struct _FILETIME {

???DWORD dwLowDateTime; ?///64位的低32

???DWORD dwHighDateTime; ///64位的高32

}FILETIME;

(typdefDWORD unsigned long)

說明:

???FILETIME結(jié)構(gòu)是一個表示距離 1601年1月10000(英國格林威治時間,UTC)為計時起點 的時間間隔數(shù)的64位整數(shù),數(shù)值單位為100ns(納秒)

使用該結(jié)構(gòu)定義出的變量,不能直接用來進行加減運算,應(yīng)先合成64為整型數(shù),再進行各種數(shù)學(xué)運算。如方法一:

FILETIME?time;

__int64 val64= time.dwHighDateTime<<32 | time.dwLowDateTime

方法二,使用LARGE_INTEGER結(jié)構(gòu):

FILETIME?time1;

LARGE_INTEGER time2;

time2.LowPart=time1.dwHighDateTime;

time2.HighPart=time1.dwHighDateTime;

time2.QuadPart;?// __int64

?

時間結(jié)構(gòu)體2.1:

typedef union _LARGE_INTEGER{

???struct{

???????LONG LowPart; ///64位整型數(shù)的低32

???????LONG HighPart;/// 64位整型數(shù)的高32

????};

LONGLONG QuadPart; ///64位整型數(shù)

}LARGE_INTEGER;

typedef LARGE_INTEGER *PLARGE_INTEGER;

?

時間結(jié)構(gòu)體2.2

ULARGE_INTEGER //一個64位的無符號整型值 The ULARGE_INTEGER structure is used to specify a 64-bit unsigned integer value. //類型定義 typedef union _ULARGE_INTEGER { struct { DWORD LowPart; DWORD HighPart; }; ULONGLONG QuadPart; } ULARGE_INTEGER; Members Specifies the low-order 32 bits. Specifies the high-order 32 bits. Specifies a 64-bit unsigned integer.

時間結(jié)構(gòu)體3//系統(tǒng)時間格式

typedef struct _SYSTEMTIME{?

???WORD wYear; ??????? ///

???WORD wMonth;??? ?? /// 月 。1月份則值為12月份則值為2…..

???WORD wDayOfWeek; ?? 一星期中的第幾天。星期日則值為0,星期一則值為1….

???WORD wDay; ???? ///

???WORD wHour; ??????? ///

???WORD wMinute;?????? ///

???WORD wSecond;?????? ///

???WORD wMilliseconds; ??? /// 毫秒

}SYSTEMTIME;

不要直接對結(jié)構(gòu)體里的成員進行運算。應(yīng)該:

先從SYSTEMTIME structure轉(zhuǎn)換成FILETIME structure

再把FILETIME structure轉(zhuǎn)換成LARGE_INTEGER structure

最后LARGE_INTEGER structure轉(zhuǎn)換成64位整型數(shù),才進行加減運算。

?

?

二.時間格式轉(zhuǎn)換API

1.1用于轉(zhuǎn)換 MS-DOS16位日期和時間值 為 64-bit文件時間格式

BOOLDosDateTimeToFileTime(

???WORD wFatDate,? // 16-bit MS-DOS date

???WORD wFatTime,? // 16-bit MS-DOS time

???LPFILETIME lpFileTime ? // pointer to buffer for 64-bit file time

??);??

參數(shù):

wFatDate,指定16MS-DOS日期值。各位的代表意義:

???? 描述

0-4?? (1-31)

5-8?? (1January, 2February,…)

9-15??年,當(dāng)前距離1980年的年數(shù)(包括1980年)

wFatTime,指定16MS-DOS時間值。各位的代表意義:

??? 描述

0-4??

5-10????? (0-59)

11-15? (0-23)

?

1.2用于轉(zhuǎn)換 64位文件時間格式 為?MS-DOS日期時間值.

BOOLFileTimeToDosDateTime(

???CONST LPFILETIME lpFileTime,??? // pointer to 64-bit file time

???LPWORD lpFatDate,?? // pointer to variable for MS-DOS date?

???LPWORD lpFatTime ?? // pointer to variable for MS-DOS time?

??);

?

2.1用于把 文件時間格式 轉(zhuǎn)換成 系統(tǒng)時間格式

BOOLFileTimeToSystemTime(

???CONST FILETIME *lpFileTime,

???LPSYSTEMTIME lpSystemTime );

返回值:

???成功,則返回TURE

???失敗,則返回FALSETo get extended error information, call GetLastError.

注:當(dāng)FILETIME的值等于或大于0x80000000 00000000,則函數(shù)會失敗。

?

2.2用于把 系統(tǒng)時間格式 轉(zhuǎn)換成 文件時間格式

BOOLSystemTimeToFileTime(

???CONST SYSTEMTIME *lpSystemTime,

???LPFILETIME lpFileTime

??);

?

3.1///用把 UTC時間 轉(zhuǎn)換為 本地時間

BOOLFileTimeToLocalFileTime(

???CONST FILETIME *lpFileTime, // pointer to UTC file time to convert?

???LPFILETIME lpLocalFileTime // pointer to converted file time

??);

3.2///用把本地時間 轉(zhuǎn)換為 UTC時間

?BOOLLocalFileTimeToFileTime(

???CONST FILETIME *lpLocalFileTime, // address of local file time to convert

???LPFILETIME lpFileTime ? // address of converted file time

???);

?

?

三.獲得系統(tǒng)時間

獲取當(dāng)前系統(tǒng)的日期和時間(UTC時間 )

VOIDGetSystemTime( LPSYSTEMTIME lpSystemTime );

?

BOOLSetSystemTime( CONST SYSTEMTIME *lpSystemTime );

?

獲取當(dāng)前系統(tǒng)的日期和時間(本地時區(qū) )

VOIDGetLocalTime( LPSYSTEMTIME lpSystemTime );

?

BOOLSetLocalTime( CONST SYSTEMTIME *lpSystemTime );

?

?

#include<time.h>

typedef long time_t;

//獲得系統(tǒng)時間,從UTC到獲取時刻的秒數(shù)

time_ttime( time_t *timer );

?

struct tm {

???????int tm_sec;???? /* seconds after the minute - [0,59] */

???????int tm_min;???? /* minutes after the hour - [0,59] */

???????int tm_hour;??? /* hours since midnight - [0,23] */

???????int tm_mday;??? /* day of the month - [1,31] */

???????int tm_mon;???? /* months since January - [0,11] */

???????int tm_year;??? /* years since 1900 */

???????int tm_wday;??? /* days since Sunday - [0,6] */

???????int tm_yday;??? /* days since January 1 - [0,365] */

???????int tm_isdst;?? /* daylight savings time flag */

???????};

//time_t轉(zhuǎn)換為tm格式,并是本地時區(qū)的了

structtm *localtime( const time_t *timer );?

?

?

四.獲得指定文件的各項時間

?

?

?

?

五.獲得線程和進程的各項時間

獲得指定線程的各項時間信息:

BOOL WINAPIGetThreadTimes(

IN HANDLE????? hThread,

OUT LPFILETIMElpCreationTime,

OUT LPFILETIMElpExitTime,

OUT LPFILETIMElpKernelTime,

OUT LPFILETIMElpUserTime

);

參數(shù):

lpCreationTime,指向一個FILETIME結(jié)構(gòu)體返回線程被創(chuàng)建時的時間;

lpExitTime?? 指向一個FILETIME結(jié)構(gòu)體返回線程被終止時的時間;

lpKernelTime 指向一個FILETIME結(jié)構(gòu)體返回線程在內(nèi)核模式下執(zhí)行的累計時間;

lpUserTime?? 指向一個FILETIME結(jié)構(gòu)體返回線程在用戶模式下執(zhí)行的累計時間;

返回值:

???成功,則返回TRUE

???失敗,則返回FALSE。想獲取錯誤代碼,請調(diào)用GetLastError

?

獲得進程的各項時間信息:

GetProcessTimes是個類似GetThreadTimes的函數(shù),適用于進程中的所有線程:

BOOLGetProcessTimes(

HANDLE???? hProcess,

??PFILETIME ? pftCreationTime,

PFILETIME? pftExitTime,

??PFILETIME ? pftKernelTime,

PFILETIME? pftUserTime

);

說明:

GetProcessTimes返回的時間適用于某個進程中的所有線程(甚至是已經(jīng)終止運行的線程)。例如,返回的內(nèi)核時間是所有進程的線程在內(nèi)核代碼中經(jīng)過的全部時間的總和

總結(jié)

以上是生活随笔為你收集整理的Windows API的时间结构体、时间转换及时间获取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。