-
time
提供了秒级的精确度- 头文件
time.h
- 函数原型
time_t time(time_t * timer)
函数返回从
TC1970-1-1 0:0:0
开始到现在的秒数.用
time
函数结合其他函数(如:localtime
,gmtime
,asctime
,ctime
) 可以获得当前系统时间或是标准时间.#include <time.h> #include <stdio.h> int main(void) { time_t t; t = time(NULL); printf("The number of seconds since January 1, 1970 is %ld", t); return 0; }
#include <stdio.h> #include <stddef.h> #include <time.h> int main(void) { time_t timer; // time_t就是long int 类型 struct tm *tblock; timer = time(NULL); // 这一句也可以改成time(&timer); tblock = localtime(&timer); printf("Local time is: %s\n", asctime(tblock)); return 0; }
- 头文件
-
gettimeofday
提供了微秒级的精确度- 头文件
time.h
- 函数原型
int gettimeofday(struct timeval *tv, struct timezone *tz);
gettimeofday
会把目前的时间由tv
所指的结构返回, 当地时区的信息则放到tz
所指的结构中(可用NULL
). 参数说明:
timeval
结构定义为:struct timeval { long tv_sec; /*秒*/ long tv_usec; /*微秒*/ };
timezone
结构定义为:struct timezone { int tz_minuteswest; /*和Greenwich时间差了多少分钟*/ int tz_dsttime; /*日光节约时间的状态*/ };
上述两个结构都定义在
/usr/include/sys/time.h
.tz_dsttime
所代表的状态如下:DST_NONE /*不使用*/ DST_USA /*美国*/ DST_AUST /*澳洲*/ DST_WET /*西欧*/ DST_MET /*中欧*/ DST_EET /*东欧*/ DST_CAN /*加拿大*/ DST_GB /*大不列颠*/ DST_RUM /*罗马尼亚*/ DST_TUR /*土耳其*/ DST_AUSTALT /*澳洲(1986年以后)*/
返回值: 成功则返回
0
, 失败返回-1
, 错误代码存于errno
. 附加说明EFAULT
指针tv
和tz
所指的内存空间超出存取权限.#include <stdio.h> #include <time.h> int main(void) { struct timeval tv; struct timezone tz; gettimeofday(&tv, &tz); printf("tv_sec; %d\n", tv, .tv_sec); printf("tv_usec; %d\n", tv.tv_usec); printf("tz_minuteswest; %d\n", tz.tz_minuteswest); printf("tz_dsttime, %d\n", tz.tz_dsttime); return 0; }
- 头文件
-
clock_gettime
提供了纳秒级的精确度- 头文件
time.h
- 编译&链接. 在编译链接时需加上
-lrt
; 因为在librt
中实现了clock_gettime
函数. - 函数原型
int clock_gettime(clockid_t clk_id, struct timespect *tp);
参数说明:
clockid_t
,clk_id
用于指定计时时钟的类型, 有以下4种:CLOCK_REALTIME
: 系统实时时间, 随系统实时时间改变而改变, 即从UTC1970-1-1 0:0:0
开始计时, 中间时刻如果系统时间被用户该成其他, 则对应的时间相应改变.CLOCK_MONOTONIC
: 从系统启动这一刻起开始计时, 不受系统时间被用户改变的影响CLOCK_PROCESS_CPUTIME_ID
: 本进程到当前代码系统CPU花费的时间CLOCK_THREAD_CPUTIME_ID
: 本线程到当前代码系统CPU花费的时间
struct
,timespect *tp
用来存储当前的时间, 其结构如下:struct timespec { time_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ };
返回值: 0成功, -1失败.
#include <stdio.h> #include <time.h> int main() { struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); printf("CLOCK_REALTIME: %d, %d\n", ts.tv_sec, ts.tv_nsec); // 打印出来的时间跟 cat/proc/uptime 第一个参数一样 clock_gettime(CLOCK_MONOTONIC, &ts); printf("CLOCK_MONOTONIC: %d, %d\n", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); printf("CLOCK_PROCESS_CPUTIME_ID: %d, %d\n", ts.tv_sec, ts.tv_nsec); clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); printf("CLOCK_THREAD_CPUTIME_ID: %d, %d\n", ts.tv_sec, ts.tv_nsec); printf("%d\n", time(NULL)); return 0; }
/proc/uptime
里面的两个数字分别表示: the uptime of the system(seconds), and the amount of time spent in idle process(seconds). 把第一个数读出来, 那就是从系统启动至今的时间, 单位是秒. - 头文件
-
_ftime
提供毫秒级的精确度- 头文件
sys/types.h
,sys/timeb.h
- 函数原型
void _ftime(struct _timeb *timeptr);
参数说明:
struct _timeb { time_t time; unsigned short millitm; short timezone; short dstflag; };
示例代码:
#include <stdio.h> #include <sys/timeb.h> #include <time.h> void main(void) { struct _timeb timebuffer; char *timeline; _ftime(&timebuffer); timeline = ctime(& (timebuffer.time)); printf("The time is %.19s.%hu %s\n", timeline, timebuffer.millitm, &timeline[20]); }
- 头文件
Last active
July 3, 2017 17:29
-
-
Save michaelHL/0fd611c8a4ccc50e431f4dfa7fed285c to your computer and use it in GitHub Desktop.
Linux系统常用时间函数
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment