Windows API的时间结构体、时间转换及时间获取
来源:互联网 发布:平价时尚欧美女装知乎 编辑:程序博客网 时间:2024/06/08 06:44
时间格式:DosDateTime <====>FileTime <====>SystemTime
| | |
使用上面 LocalFileTime FileName 系统时间和本地时间
格式的时间: (本地时区) (UTC)
一.时间结构体
时间结构体1://文件时间格式
typedef struct _FILETIME {
DWORD dwLowDateTime; ///64位的低32位
DWORD dwHighDateTime; ///64位的高32位
}FILETIME;
(typdefDWORD unsigned long)
说明:
FILETIME结构是一个表示距离 1601年1月1日00时00分(英国格林威治时间,UTC)为计时起点 的时间间隔数的64位整数,数值单位为100ns(纳秒)
使用该结构定义出的变量,不能直接用来进行加减运算,应先合成64为整型数,再进行各种数学运算。如方法一:
FILETIME time;
__int64 val64= time.dwHighDateTime<<32 | time.dwLowDateTime;
方法二,使用LARGE_INTEGER结构:
FILETIME time1;
LARGE_INTEGER time2;
time2.LowPart=time1.dwHighDateTime;
time2.HighPart=time1.dwHighDateTime;
time2.QuadPart; // __int64
时间结构体2.1:
typedefunion _LARGE_INTEGER{
struct{
LONG LowPart; ///64位整型数的低32位
LONG HighPart;/// 64位整型数的高32位
};
LONGLONG QuadPart; ///64位整型数
}LARGE_INTEGER;
typedef LARGE_INTEGER *PLARGE_INTEGER;
时间结构体2.2:
时间结构体3://系统时间格式
typedef struct _SYSTEMTIME{
WORD wYear; /// 年
WORD wMonth; /// 月 。1月份则值为1,2月份则值为2,…..
WORD wDayOfWeek; //// 一星期中的第几天。星期日则值为0,星期一则值为1,….
WORD wDay; /// 日
WORD wHour; /// 时
WORD wMinute; /// 分
WORD wSecond; /// 秒
WORD wMilliseconds; /// 毫秒
}SYSTEMTIME;
不要直接对结构体里的成员进行运算。应该:
先从SYSTEMTIME structure转换成FILETIME structure,
再把FILETIME structure转换成LARGE_INTEGER structure
最后LARGE_INTEGER structure转换成64位整型数,才进行加减运算。
二.时间格式转换API
1.1用于转换 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
);
参数:
wFatDate,指定16位MS-DOS日期值。各位的代表意义:
位 描述
0-4 日(1-31)
5-8 月(1表January, 2表February,…)
9-15 年,当前距离1980年的年数(包括1980年)
wFatTime,指定16位MS-DOS时间值。各位的代表意义:
位 描述
0-4 秒
5-10 分 (0-59)
11-15 时 (0-23)
1.2用于转换 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用于把 文件时间格式 转换成 系统时间格式
BOOLFileTimeToSystemTime(
CONST FILETIME *lpFileTime,
LPSYSTEMTIME lpSystemTime );
返回值:
成功,则返回TURE;
失败,则返回FALSE。To get extended error information, call GetLastError.
注:当FILETIME的值等于或大于0x80000000 00000000,则函数会失败。
2.2用于把 系统时间格式 转换成 文件时间格式
BOOLSystemTimeToFileTime(
CONST SYSTEMTIME *lpSystemTime,
LPFILETIME lpFileTime
);
3.1///用把 UTC时间 转换为 本地时间
BOOLFileTimeToLocalFileTime(
CONST FILETIME *lpFileTime,// pointer to UTC file time to convert
LPFILETIME lpLocalFileTime// pointer to converted file time
);
3.2///用把本地时间 转换为 UTC时间
BOOLLocalFileTimeToFileTime(
CONST FILETIME *lpLocalFileTime, // address of local file time to convert
LPFILETIME lpFileTime // address of converted file time
);
三.获得系统时间
获取当前系统的日期和时间(UTC时间)
VOIDGetSystemTime( LPSYSTEMTIME lpSystemTime );
BOOLSetSystemTime( CONST SYSTEMTIME *lpSystemTime );
获取当前系统的日期和时间(本地时区)
VOIDGetLocalTime( LPSYSTEMTIME lpSystemTime );
BOOLSetLocalTime( CONST SYSTEMTIME *lpSystemTime );
#include<time.h>
typedef long time_t;
//获得系统时间,从UTC到获取时刻的秒数
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转换为tm格式,并是本地时区的了
structtm*localtime( const time_t *timer );
四.获得指定文件的各项时间
五.获得线程和进程的各项时间
获得指定线程的各项时间信息:
BOOL WINAPIGetThreadTimes(
IN HANDLE hThread,
OUT LPFILETIMElpCreationTime,
OUT LPFILETIMElpExitTime,
OUT LPFILETIMElpKernelTime,
OUT LPFILETIMElpUserTime
);
参数:
lpCreationTime,指向一个FILETIME结构体返回线程被创建时的时间;
lpExitTime, 指向一个FILETIME结构体返回线程被终止时的时间;
lpKernelTime,指向一个FILETIME结构体返回线程在内核模式下执行的累计时间;
lpUserTime, 指向一个FILETIME结构体返回线程在用户模式下执行的累计时间;
返回值:
成功,则返回TRUE;
失败,则返回FALSE。想获取错误代码,请调用GetLastError。
获得进程的各项时间信息:
GetProcessTimes是个类似GetThreadTimes的函数,适用于进程中的所有线程:
BOOLGetProcessTimes(
HANDLE hProcess,
PFILETIME pftCreationTime,
PFILETIME pftExitTime,
PFILETIME pftKernelTime,
PFILETIME pftUserTime
);
说明:
GetProcessTimes返回的时间适用于某个进程中的所有线程(甚至是已经终止运行的线程)。例如,返回的内核时间是所有进程的线程在内核代码中经过的全部时间的总和
- Windows API的时间结构体、时间转换及时间获取
- Windows API的时间结构体、时间转换及时间获取
- Windows API的时间结构体、时间转换及时间获取
- Windows API的时间结构体、时间转换及时间获取
- Windows API的时间结构体、时间转换及时间获取
- WindowsAPI的时间结构体、时间转换及时间获取
- windows获取时间API
- 时间获取及转换
- 时间获取及转换
- 获取系统时间函数及时间格式的转换
- Mysql时间获取及转换
- JS获取时间的相关函数及时间戳与时间日期之间的转换
- golang获取当前时间、时间戳和时间字符串及它们之间的相互转换
- PHP 时间戳及格林威治时间互相转换及一些常用的时间比较的API
- Windows API 获取系统时间毫秒星期
- 获取时间及时间修改
- 获取windows时间的程序
- 获取当前日期时间、日期时间格式化及转换
- cocos-js 常用API
- jsp页面中的代码执行加载顺序介绍
- 如何在C++中将filetime时间转化为字符串?
- 滑动鼠标改变背景色
- Java注解----自定义注解
- Windows API的时间结构体、时间转换及时间获取
- 获取iOS任意线程调用堆栈(一)获取任意线程的调用栈地址列表
- mac下scrapy的安装
- Hibernate Lazy机制
- ztree显示
- CDOJ-----最长上升子序列
- Android与MVC设计模式
- 选择排序
- Win32时间类型FILETIME/SYSTEMTIME/WINDOWSTIME(FILETIME这个名字很奇怪,其实他跟FILE并没有直接关系,只是很多File的API中,都以这个为时间的类型)