您的位置:首页 > 其它

FILETIME, SYSTEMTIME 与 time_t 相互转换

2015-05-14 13:49 344 查看

FILETIME, SYSTEMTIME 与 time_t 相互转换

//************************************************************

//FILETIME, SYSTEMTIME 与 time_t 相互转换

//#####SYSTEMTIME 与 FILETIME相互转换#####

//可以使用系统函数

//FileTimeToSystemTime(&ftcreate,&stcreate);

//参数:

//(lpFileTime As FILETIME, lpSystemTime As SYSTEMTIME)

//说明

//根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构

//返回值

//Long,非零表示成功,零表示失败。会设置GetLastError

//参数表

//参数 类型及说明

//lpFileTime FILETIME,包含了文件时间的一个结构

//lpSystemTime SYSTEMTIME,用于装载系统时间信息的一个结构

//#####SYSTEMTIME 与 time_t相互转换#####

//#### Time_tToSystemTime ####

void TimetToSystemTime( time_t t, LPSYSTEMTIME pst )

{

FILETIME ft;

LONGLONG ll = Int32x32To64(t, 10000000) + 116444736000000000;

ft.dwLowDateTime = (DWORD) ll;

ft.dwHighDateTime = (DWORD)(ll >> 32);

FileTimeToSystemTime( &ft, pst );

}

//#### SystemTimeToTime_t ####

void SystemTimeToTime_t( SYSTEMTIME st, time_t *pt )

{

FILETIME ft;

SystemTimeToFileTime( &st, &ft );

LONGLONG ll;

ULARGE_INTEGER ui;

ui.LowPart = ft.dwLowDateTime;

ui.HighPart = ft.dwHighDateTime;

ll = (ft.dwHighDateTime << 32) + ft.dwLowDateTime;

*pt = (DWORD)((LONGLONG)(ui.QuadPart - 116444736000000000) / 10000000);

}

//#### FileTimeToTime_t ####

void FileTimeToTime_t( FILETIME ft, time_t *t )

{

LONGLONG ll;

ULARGE_INTEGER ui;

ui.LowPart = ft.dwLowDateTime;

ui.HighPart = ft.dwHighDateTime;

ll = ft.dwHighDateTime << 32 + ft.dwLowDateTime;
//这一步是不是多余的

*t = ((LONGLONG)(ui.QuadPart - 116444736000000000) / 10000000);

//将[b]ui.QuadPart的数据类型ULONGLONG强制转换为time_t[b]LONGLONG[b]数据类型[/b][/b][/b]

}

//

struct {
DWORD LowPart;
DWORD HighPart;
}; 和ULONGLONG QuadPart;组成共用体ULARGE_INTEGER

//********************************************************************/

参见:

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

时间结构体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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐