Linux应用程序学习之时间函数

来源:互联网 发布:软件测试方面的书籍 编辑:程序博客网 时间:2024/05/21 11:26

Linux应用程序学习之时间函数

        这一课我学习了Linux中与时间相关的函数编程,下面我就来介绍这些函数。Linux中与时间相关的函数有不少,而且还有分类,有显示为日历时间,有显示为标准时间,有显示为本地时间的,下面我们就来介绍一些相关函数,当然在前面我说过在Linux终端中采用man命令可以很清楚的查看到相关函数的信息,所以在此我只列出函数的原型以及一些必要的解释,详细的描述大家可在linux下面采用man命令来查看。

(1)获取日历时间函数

                                                        time_t time(time_t *t);

         需要注意的是这个time_t类型符其实就是我们的int型,只是linux下面为了好辨认,重新定义了一个名字,该函数能获取日历时间,何为日历时间?所谓的日历时间就是从1970年1月1日0时0分0秒到现在的时间,并且该函数返回值为以秒计的时间。至于为什么取这个时间为起始,大家可以自己网上了解下,应该是跟计算机位数有关系,取得一个综合的时间的。该函数的参数的意义是,如果其不为空指针(NULL),则函数返回的日历时间将会被存放在该指针所指向的内存位置,否则不存放。

(2)获取标准时间,也就是我们所说的格林威治时间

                                                       struct  tm*gmtime(const time_t *timep);

这个函数可以将我们的日历时间转化为格林威治时间,参数就是待转化的日历时间,需要注意,这个参数是一个指针,因此我们要取这个时间的地址了。该函数返回一个结构体指针,其原型如下:

struct tm {

inttm_sec;

inttm_min;

inttm_hour;

inttm_mday;

inttm_mon;

inttm_year;

inttm_wday;

inttm_yday;

inttm_isdst;

};

具体成员的含义看名字应该就有所了解,后面我们会以一个例子来让大家直观了解。

(3)获取本地时间,也就是我们计算机显示的时间

                                                struct tm *localtime(consttime_t *timep);

这个函数跟上面获取格林威治时间函数类似,参数和返回值都一样,因此就不详细解释了。

(4)以字符串方式显示时间

                                               char * asctime(const struct tm*);

                                               char * ctime(const time_t *timep);

所谓的以字符串方式显示时间,就是显示方式类似我们linux下面date命令后时间的显示方式,也是我们比较习惯的显示方式,这个有这两个函数,返回值都为字符指针,只不过前一个函数参数是一个struc tm*类型,后面一个为待转化的日历时间类型,根据具体的类型,我们就可以调用不同的函数了。

(5)获取高精度时间

                                              int gettimeofday(structtimeval *tv , struct timezone *tz);

这个函数可以将时间获取精确到微秒级别,所以称为高精度获取时间。我们需要注意该函数的参数和返回值,我们调用这个函数的时候,系统将获取的时间存放在第一个参数中,也就是struct timeval这个结构体中,这个结构体原型为

       structtimeval

          {

                time_t       tv_sec;

                suseconds_t   tv_usec;

         }

第一个参数为存放的秒数,第二个参数为存放微秒数,而这个函数的返回值不是时间,而是一个标志,如果系统正确将时间存放在这个结构体中,返回值为0,否则为-1,至于该函数的第二个参数,其一般指定为NULL,即空指针。

下面我们就以一个程序来说明这些函数的具体功能,需要说明的是,我们要正确添加我们相关函数的头文件,不然会出错,函数所在头文件我们可以通过man命令查看。在程序中,我已在必要的地方做好了注释,程序如下所示:

#include<stdio.h>

#include<time.h>

#include<sys/time.h>

 

void main()

{

        time_t caltime;

        struct tm *stime;

        struct tm *ltime;

        struct timeval *tv;

        char *astime;

        char *cstime;

         

        caltime = time(NULL);        //获取日历时间函数

        printf("the calendar time is %d\n" , caltime);    

        stime = gmtime(&caltime);   //通过gmtime函数将日历时间转化为标准时间

        printf("the standard is %d hour , %d min ,%d sec\n" ,stime->tm_hour ,stime->tm_min , stime->tm_sec); 

        ltime = localtime(&caltime); //通过localtime函数可以将日历时间转化为本地时间

        printf("the user_zone time is %d hour , %d min ,%d sec\n",ltime->tm_hour,ltime->tm_min,ltime->tm_sec);   

        astime = asctime(ltime);

        printf("the string time is %s\n" , astime);

        cstime = ctime(&caltime);  //astime和cstime函数都是返回时间的字符串形式,只是参数有所差别

        printf("the ctime time is %s\n" , cstime);         

        gettimeofday(tv , NULL);    //调用gettimeofday函数可以获取更加精确的时间,可达到微妙级

        printf("the second = %d ,micsecond = %d\n ",tv->tv_sec,tv->tv_usec);/

}

 

通过在linux下面运行该程序,我们可以得到如下结果,


好了,这就是我学习linux下时间函数的知识总结,大家可以试着写一下,同时希望得到大家的批评指正。

0 0
原创粉丝点击