在编程时候,我们很经常需要获取当前系统时间,或者获取时间戳。这就离不开linux中与时间相关的函数。
下面我们可以通过一张图片来对下面这些函数有个大概的了解。
通过上面这张图片,我们就可以知道这些函数大概之间的关系。但是这个少了一个比较经常用的函数gettimeofday,下面一一来讲解这几个函数!
unix内核提供的基本时间服务是国际标准时间公元1970年1月1日00:00:00以来经过的秒数。我们可以直接通过time函数或者经过的秒数。
其实很多人都想知道time_t到底是一个什么数据类型。当时间久了,会不会出现溢出等问题。
那我就来对这个数据类型来刨根。来看看这到底是何方神圣!
在/usr/include/time.h文件中:
在/usr/include/i386-linux-gnu/bits/types.h文件中:
在
/usr/include/i386-linux-gnu/bits/typesizes.h
在/usr/include/i386-linux-gnu/bits/types.h文件中:
这里转了那么久,终于知道了
__extension__ typedef long int time_t
其实time_t的类型就是long int类型。
下面通过代码对这些函数有个进一步了解:
-
#include <stdio.h>
-
#include <time.h>
-
#include <sys/time.h>
-
-
int main(void)
-
{
-
time_t time1;
-
-
time(&time1);
-
printf("time:\nsec:%ld\n\n",time1);
-
-
-
struct timeval time2;
-
gettimeofday(&time2,NULL);
-
/*tv_sec:秒 tv_usec:微秒*/
-
printf("gettimeofday:\nsec:%ld,msec:%ld\n",time2.tv_sec,time2.tv_usec);
-
-
return 0;
-
}
执行后的结果:
下面再看下面的一段代码:
-
#include <stdio.h>
-
#include <time.h>
-
#include <sys/time.h>
-
-
int main(void)
-
{
-
time_t time1;
-
time(&time1);
-
-
struct tm *time2;
-
time2 = gmtime(&time1);
-
-
printf("tm_sec:%d,tm_min:%d,tm_hour:%d,tm_mday:%d,tm_mon:%d,tm_year:%d,tm_wday:%d,tm_yday:%d,tm_isdst:%d\n",
-
time2->tm_sec,time2->tm_min,time2->tm_hour,
-
time2->tm_mday,time2->tm_mon,time2->tm_year,
-
time2->tm_wday,time2->tm_yday,time2->tm_isdst);
-
-
printf("%ld\n",mktime(time2));
-
printf("%s",asctime(time2));
-
-
time2= localtime(&time1);
-
-
printf("tm_sec:%d,tm_min:%d,tm_hour:%d,tm_mday:%d,tm_mon:%d,tm_year:%d,tm_wday:%d,tm_yday:%d,tm_isdst:%d\n",
-
time2->tm_sec,time2->tm_min,time2->tm_hour,
-
time2->tm_mday,time2->tm_mon,time2->tm_year,
-
time2->tm_wday,time2->tm_yday,time2->tm_isdst);
-
-
printf("%ld\n",mktime(time2));
-
printf("%s",asctime(time2));
-
-
-
-
-
return 0;
-
}
执行后的结果:
这里要注意gmtime和localtime函数的区别。
与时间相关的函数编程就说到这里的,有兴趣的也可以研究下strftime函数。
阅读(1481) | 评论(0) | 转发(0) |