linuxc时间函数

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;
}

你可能感兴趣的:(linuxc时间函数)