linuxc时间函数
函数分类
1. 设置时间:settimeofday(), tzset()
2. 获取时间:time(), ftime(), gettimeofday()
3. 时间格式转换:mktime(), strtime(), gmtime(), localtime(), asctime(), ctime()
4. 其他:clock(), difftime()
asctime:将时间和日期以字符串格式表示
头文件:time.h
time:获取目前的时间
头文件:time.h
函数定义:time_t time(time_t *t)
说明:time()会返回从1970年1月1日从0时0分0秒算起的UTC时间到现在所经过的秒数,如果t并非空指针的话,此函数也会将返回值存到t指针所指的内存。
#include <stdio.h>
#include <time.h> /*包含“time.h”头文件*/
/*time函数会从公元1970年1月1日的UTC时间算到现在经过的秒数。参数t是一个指针
,如果不是一个空指针,函数也会将返回值存到t指针所指的内存单元中,
time_t是“time.h”头文件中定义的一个数据类型,所示一个时间的秒数
相当于一个长整形变量,同时,函数会返回一个time_t型长整数*/
//time_t time(time_t *t);
void time_test()
{
time_t t1; //定义一个time_t型时间变量
time_t t2;
t2 = time(&t1); //获取当前的时间,参数是time_t 指针
printf("t1: %d\n", t1); //t1 == t2
printf("t2: %d\n", t2);
}
int main01(void)
{
time_test();
printf("Hello World!\n");
return 0;
}
gmtime:将秒数转换成时间和日期
头文件:time.h
函数定义:struct tm * gmtime(const time_t * timep);
说明:gmtime()将参数timep所指的time_t结构中的信息转换成现实世界所使用的时间日期表示方法,
然后将结果友结构tm返回,结构tm的定义为:
struct tm{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
int tm_sec
代表目前秒数,正常范围为0-59
int tm_min 代表目前分数,范围0-59
int tm_hour 从午夜算起的时间,范围0-23
int tm_mday 目前月份的天数, 范围01-31
int tm_mon 目前月份,从1月算起,范围0-11
int tm_year 从1970年算起至今的年数
int tm_wday 一星期的日数,从星期一算起,范围为0-6
int tm_yday 从今年1月1日算起至的天数, 范围为0-365
int tm_isdst 日光节约时间的旗标
#include <stdio.h>
#include <time.h>
void gmtime_test()
{
struct tm *tm1; //定义一个tm型结构体指针
time_t t1; //定义一个time_t型变量
time(&t1);
tm1 = gmtime(&t1);
printf("分钟是: %d\n", (*tm1).tm_min);
printf("秒是: %d\n", tm1->tm_sec);
printf("year: %d\n",1900+tm1->tm_year);
}
int main()
{
gmtime_test();
printf("hello world!\n");
return 0;
}
ctime:将时间和日期以字符串格式表示
头文件:time.h
函数定义:char * ctime(const time_t * timep);
说明:ctime()的参数是一个指向timep类型的指针。函数会把这个指针转换成一个字符串,
然后返回为一个字符串的头指针。这里返回的时间已经转换成本地时区的时间,与计算机现实的时间相同。
asctime:将时间和日期以字符串格式表示
头文件:time.h
函数定义:char *asctime(const struct tm *timeptr);
说明:asctime()将函数timeptr所指的tm结构中的信息转换成现实世界所使用的时间日期表示方法,然后将结果以字符串形式返回。
#include <stdio.h>
#include <time.h>
/* 头文件:time.h
函数定义:char * ctime(const time_t * timep);
说明:ctime()的参数是一个指向timep类型的指针。函数会把这个指针转换成一个字符串,
然后返回为一个字符串的头指针。这里返回的时间已经转换成本地时区的时间,与计算机现实的时间相同。
*/
/*
头文件:time.h
函数定义:char *asctime(const struct tm *timeptr);
说明:asctime()将函数timeptr所指的tm结构中的信息转换成现实世界所使用的时间日期表示方法,
然后将结果以字符串形式返回。
*/
void asctime_ctime_test()
{
time_t t1;
struct tm * tm1;
t1 = time((time_t *)NULL);
tm1 = gmtime(&t1);
printf("%s\n", ctime(&t1));
printf("%s", asctime(tm1));
}
int main()
{
asctime_ctime_test();
printf("hello world\n");
return 0;
}
localtime:函数localtime的作用是返回tm结构格式的当地时间
头文件:time.h
函数定义:struct tm *localtime(const time_t *timep);
说明:localtime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,
然后将结果由结构tm返回,与gmtime不同的是,gmtime函数返回的是一个UTC时间。
#include <stdio.h>
#include <time.h>
/*头文件:time.h
函数定义:struct tm * gmtime(const time_t * timep);
说明:gmtime()将参数timep所指的time_t结构中的信息转换成现实世界所使用的时间日期表示方法,
然后将结果友结构tm返回*/
/*
localtime:函数localtime的作用是返回tm结构格式的当地时间
头文件:time.h
函数定义:struct tm *localtime(const time_t *timep);
说明:localtime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,
然后将结果由结构tm返回,与gmtime不同的是,gmtime函数返回的是一个UTC时间。
*/
void gmtime_test()
{
struct tm *tm1; //定义一个tm型结构体指针
time_t t1; //定义一个time_t型变量
struct tm *tm2;
time(&t1);
tm1 = gmtime(&t1);
tm2 = localtime(&t1);
printf("分钟是: %d\n", (*tm1).tm_min);
printf("秒是: %d\n", tm1->tm_sec);
printf("year: %d\n",tm1->tm_year);
printf("gmtime: 小时: %d\n", tm1->tm_hour);
printf("localtime: 年是:%d\n", tm2->tm_year);
printf("localtime:小时:%d\n", tm2->tm_hour);
}
int main()
{
gmtime_test();
printf("hello world!\n");
return 0;
}
mktime:将时间转换成秒数函数mktime
函数mktime的作用是将一个tm结构类型的时间转换成秒数时间
头文件:time.h
函数定义:time_t mktime(struct tm * timeptr);
说明:mktime()用来将参数timeptr所指的tm结构转换成从1970年1月1日0时0分0秒算起至今的UTC时间所经过的秒数
#include <stdio.h>
#include <time.h>
void mktime_test1()
{
time_t t1;
time_t t2, t3;
struct tm * tm1, *tm2;
t1 = time(NULL);
printf("time()的秒数是: %d\n", t1);
//转换成本地时间表示
tm1 = localtime(&t1);
tm2 = gmtime(&t1);
printf("tm1->isdst是: %d\n", tm1->tm_isdst); //0
printf("tm2->isdst的时间是: %d\n", tm2->tm_isdst); //0
printf("tm1->tm_hour是: %d\n", tm1->tm_hour); //6
printf("tm2->tm_hour的时间是: %d\n", tm2->tm_hour); //6
//用tm装换成时间的字符串表示
printf("localtime()的时间是: %s\n", asctime(tm1)); //Mon Jan 11 06:18:47 2016
printf("gmtime()的时间是: %s\n", asctime(tm2)); //Mon Jan 11 06:18:47 2016
//用time_t转换成字符串表示
printf("localtime()的时间是: %s\n", ctime(&t1)); //Mon Jan 11 14:18:47 2016
//把tm转变成time_t再转变成字符串
t2 = mktime(tm1);
t3 = mktime(tm2);
printf("localtime转变的tm再赚回来是: %d\n", t2);
printf("gmtime转变的tm再赚回来是: %d\n", t3);
}
int main()
{
mktime_test1();
printf("Hello World\n");
return 0;
}
gettimeofday:取得目前时间
头文件:sys/time.h unist.d
函数定义: int gettimeofday(struct timeval * tv, struct timezone *tz);
说明:gettimeofday()会把目前的时间用tv所指的结构返回,当地时区的信息则放到tz所指的结构中,成功则返回0,
失败则返回-1,错误代码存于errno
EFAULT是指tv和tz所指的内存空间超出权限
timeval结构定义为:
struct timeval{
/*为从1970年1月1日至今的秒数*/
long tv_sec;
/*微秒*/
long tv_usec;
};
timezone 结构定义为:
struct timezone{
/*和UTC时间差了多少分钟*/
int tz_minuteswest;
/*与夏令时间相差的分钟数*/
int tz_dsttime;
};
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
void gettimeofday_test()
{
struct timeval tv;
struct timezone tz;
gettimeofday(&tv, &tz);
printf("秒数是: %d\n", tv.tv_sec);
printf("毫秒是: %d\n", tv.tv_usec);
}
int main41()
{
gettimeofday_test();
printf("hello world!\n");
return 0;
}
settimeofday:设置目前的时间
头文件:sys/time.h unistd.h
函数定义: int settingofday(struct timeval *tv, struct timezone * tz);
说明:settimeofday()会把目前时间设置成tv所指的结构信息,当地地区信息则设置成tz所指的结构
注意:只有root权限才能使用此函数修改时间,成功返回0, 失败返回-1,错误码errno
EPERM:并非由root权限调用settingofday(),权限不够
EINVAL 时区或某个数据是不正确的,无法正确设置时间
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
/*
头文件:sys/time.h unistd.h
函数定义: int settingofday(struct timeval *tv, struct timezone * tz);
说明:settimeofday()会把目前时间设置成tv所指的结构信息,当地地区信息则设置成tz所指的结构
注意:只有root权限才能使用此函数修改时间,成功返回0, 失败返回-1,错误码errno
EPERM:并非由root权限调用settingofday(),权限不够
EINVAL 时区或某个数据是不正确的,无法正确设置时间
*/
void setimeofday_test()
{
int ret = 0;
struct timeval tv;
struct timezone tz;
gettimeofday(&tv, &tz);
printf("tv_sec : %ld\n", tv.tv_sec);
tv.tv_sec = tv.tv_sec+4000; //把当前时间添加4000秒
ret = settimeofday(&tv,&tz);
printf("%d\n", ret);
}
int main51()
{
printf("Hello World!!\n");
return 0;
}
strftime:格式化日期和时间
头文件:time.h
函数定义:size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
说明:strftime()会将参数tm的时间结构,参照参数format所指的的字符串格式做转换, 转换后的字符串内容
将复制到参数s所指的字符串数组中,该子复查under最大长度为参数max所控制, 下面是参数format的格式指令:
%a 当地星期日期的名称缩写, 如:Sun
%A当地星期日期的名称缩写, 如: Sunday
%b当地月份的缩写
%B 当地月份的完整名称
%c 当地适当的日期与时间表示法
%C 以year/100表示年份
%d 月里的天数, 表示法为01-31
%D 相当于"%m%d%y"格式
%e 月里的天数, 表示法为1-31
%h 当地月份的缩写
%H 以24小时制表示小时数, 表示法为00-23
%I 以12小时制表示小时数, 表示法为01-12
%j 一年中的天数(001-366)
%k 以24小时制表示小时数, 表示法为0-23
%l 以12小时制表示小时数, 表示法为1-12
%m 月份(01-12)
%M 分钟数(00-59)
%n 同\n
%p 显示对应的AM或PM
%P 显示对应的am或pm
%r 相当于使用"%I:%M:%S %p"格式
%R 相当于使用"%H:%M"格式
%s 从1970年1月1日0时0分0秒算起至今的UTC时间所经过的秒数
%S 秒数(00-59)
%t 同\t
%T 24小时时间表示, 相当于"%H:%M:%S"格式
%u 一星期中的星期日期, 范围1-7, 星期一从1开始
%U 一年中的星期数(00-53), 一月第一个星期日开始为01
%w 一星期中的星期日期, 范围0-6, 星期日从0开始
%W 一年中的星期数(00-53), 一月第一个星期一开始为01
%x 当地适当的日期表示
%X 当地适当的时间表示
%y 一世纪中的年份表示
%Y 完整的公元年份表示
%Z 使用的时区名称
%% '%'符号
返回复制到参数s所指的字符串数组的总字节数,不包括字符串结束标符,如果返会0 表示未复制子字符串参数s内
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <time.h>
/*
头文件: time.h
函数定义: size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
说明: strftime()会将参数tm的时间结构, 参照参数format所指定的字符串格式做转换,
转换后的字符串内容将复制到参数s所指的字符串数组中, 该字符串的最大长度为参数max所控制
*/
void strftime_test()
{
char *format[] = {"%I:%M:%S %P %m%d%a", "%x %X, %Y", NULL};
char buf[30] = { 0 };
int i;
time_t t1;
struct tm *tm;
time(&t1);
tm = localtime(&t1);
for(i =0; format[i] != NULL; ++i)
{
strftime(buf, sizeof(buf), format[i], tm);
printf("%s\n", buf);
}
}
int main61()
{
strftime_test();
printf("hello world!!\n");
return 0;
}
clock:取得进程占用CPU的大约时间
头文件:time.h
函数定义:clock_t clock(void);
说明:clock()用来返回进程占用CPU的大约时间
#include <stdio.h>
#include <time.h>
/*
clock:取得进程占用CPU的大约时间
头文件:time.h
函数定义:clock_t clock(void);
说明:clock()用来返回进程占用CPU的大约时间
*/
void clock_test()
{
int i=0;
clock_t c;
for(i=0; i<1; ++i)
{
printf("i的值是: %d\n", i);
}
c = clock();
printf("%ld\n", c);
}
int main71()
{
clock_test();
printf("Hello World!!\n");
return 0;
}