windows下的时间函数
时间数据结构:
windows.h
typedef struct _systemtime {
word wyear;
word wmonth;
word wdayofweek;
word wday;
word whour;
word wminute;
word wsecond;
word wmilliseconds;
GetLocalTime(&localtm);//本地时间在控制面板中设置的时间
GetSystemTime(&systm);//UTC coordinated Universal Time
DWORD GetTickCount(void); winbase.h //开机后的毫秒数 精度1ms
winbase.h已被包含进windows.h头文件中,所以要使用GetTickCount只需包含windows.h就可以了。
用一个DWORD类型的值存放一个时间数值,那么经历足够长的时间,这个数值一定会溢出绕回到零(wrap around to zero),我们可以计算这个时间。先算一下一天有多少毫秒mmsEachDay = 24*60*60*1000=86,400,000ms。而一个DWORD最大能表示多达数值呢?DWORD在头文件windef.h中定义如下
Typedef unsigned long DWORD;(32位是4字节,在64位系统是8字节)
可以看出DWORD是一个占四个字节即两个字的空间无符号整数(32位操作系统),它能表示的最大值为232=4,294,967,695,而4,294,967,695/86,400,000 = 49.71,所以若系统持续运行(run continuously)49.71天,这个数会溢出绕回到零。
指代1970-01-01 00:00:00 到现在的秒数(对long的重定义)
时间详情 struct tm
struct tm {
int tm_sec; /* 秒,取值范围(0~59),但当遇到闰秒时则会有60秒的取值。 */
int tm_min; /* 分钟数,取值范围(0-59) */
int tm_hour; /* 小时数,取值范围(0-23) */
int tm_mday; /* 当天在这个月中是第几天,取值范围(1-31) */
int tm_mon; /* 当前月份是第几个月,取值范围(0-11) */
int tm_year; /* 从1900年开始至今的年数,即(Year - 1900)的值 */
int tm_wday; /* 当天在本周是第几天,取值范围(0-6, Sunday = 0) */
int tm_yday; /* 当天在今年是第几天,取值范围(0-365, 1 Jan = 0) */
int tm_isdst; /* 夏令时标记,值大于0表示夏令时生效;等于0表示夏令时失效;小于0表示数据不可用。 */
char *tm_zone; /* 时区名称,根据系统不同可能不被声明或不同全名。 */
};
时间函数:
获取当前时间值:
time_t time(time_t *t); 支持链式表达
把tm时间转为time_t时间
time_t mktime(struct tm tm)
把time_t时间转为tm时间
struct *tm localtime(time_t *t) 把time_t 转为 当地时间
struct *tm gmtime(time_t *t) 把time_t 转为 UTC时间
把tm时间转为字符串
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
char str_f_t [100];
strftime(str_f_t, sizeof(str_f_t), "%G-%m-%d %H:%M:%S", gm_time);
程序执行CPU周期数:
clock_t clock(void); time.h 中 clock_t 是long定义
返回程序开始执行到现在的CPU周期数,CLOCKS_PER_SEC 代表一秒钟时间CPU周期数
时间数据结构:
windows.h
typedef struct _systemtime {
word wyear;
word wmonth;
word wdayofweek;
word wday;
word whour;
word wminute;
word wsecond;
word wmilliseconds;
} SYSTEMTIME
三个函数:
SYSTEMTIME localtm, systm;GetLocalTime(&localtm);//本地时间在控制面板中设置的时间
GetSystemTime(&systm);//UTC coordinated Universal Time
DWORD GetTickCount(void); winbase.h //开机后的毫秒数 精度1ms
winbase.h已被包含进windows.h头文件中,所以要使用GetTickCount只需包含windows.h就可以了。
用一个DWORD类型的值存放一个时间数值,那么经历足够长的时间,这个数值一定会溢出绕回到零(wrap around to zero),我们可以计算这个时间。先算一下一天有多少毫秒mmsEachDay = 24*60*60*1000=86,400,000ms。而一个DWORD最大能表示多达数值呢?DWORD在头文件windef.h中定义如下
Typedef unsigned long DWORD;(32位是4字节,在64位系统是8字节)
可以看出DWORD是一个占四个字节即两个字的空间无符号整数(32位操作系统),它能表示的最大值为232=4,294,967,695,而4,294,967,695/86,400,000 = 49.71,所以若系统持续运行(run continuously)49.71天,这个数会溢出绕回到零。
linux下的时间函数
数据结构
时间值 time_t指代1970-01-01 00:00:00 到现在的秒数(对long的重定义)
时间详情 struct tm
struct tm {
int tm_sec; /* 秒,取值范围(0~59),但当遇到闰秒时则会有60秒的取值。 */
int tm_min; /* 分钟数,取值范围(0-59) */
int tm_hour; /* 小时数,取值范围(0-23) */
int tm_mday; /* 当天在这个月中是第几天,取值范围(1-31) */
int tm_mon; /* 当前月份是第几个月,取值范围(0-11) */
int tm_year; /* 从1900年开始至今的年数,即(Year - 1900)的值 */
int tm_wday; /* 当天在本周是第几天,取值范围(0-6, Sunday = 0) */
int tm_yday; /* 当天在今年是第几天,取值范围(0-365, 1 Jan = 0) */
int tm_isdst; /* 夏令时标记,值大于0表示夏令时生效;等于0表示夏令时失效;小于0表示数据不可用。 */
char *tm_zone; /* 时区名称,根据系统不同可能不被声明或不同全名。 */
};
时间函数:
获取当前时间值:
time_t time(time_t *t); 支持链式表达
把tm时间转为time_t时间
time_t mktime(struct tm tm)
把time_t时间转为tm时间
struct *tm localtime(time_t *t) 把time_t 转为 当地时间
struct *tm gmtime(time_t *t) 把time_t 转为 UTC时间
把tm时间转为字符串
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
char str_f_t [100];
strftime(str_f_t, sizeof(str_f_t), "%G-%m-%d %H:%M:%S", gm_time);
程序执行CPU周期数:
clock_t clock(void); time.h 中 clock_t 是long定义
返回程序开始执行到现在的CPU周期数,CLOCKS_PER_SEC 代表一秒钟时间CPU周期数
用(clock_end - clock_start) / CLOCKS_PER_SEC 可以得到CPU耗时(不是程序耗时)
reference
https://blog.youkuaiyun.com/zxx910509/article/details/53694796
https://www.cnblogs.com/abc-begin/p/8018597.html