您的位置:首页 > 运维架构 > Linux

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

2015-06-11 09:56 357 查看
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下时间函数的知识总结,大家可以试着写一下,同时希望得到大家的批评指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: