Chinaunix首页 | 论坛 | 博客
  • 博客访问: 389681
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-03 18:24
文章分类

全部博文(75)

文章存档

2019年(1)

2018年(20)

2017年(14)

2016年(10)

2015年(30)

分类: 嵌入式

2016-01-21 22:50:56

    在编程时候,我们很经常需要获取当前系统时间,或者获取时间戳。这就离不开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类型。

下面通过代码对这些函数有个进一步了解:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <sys/time.h>

  4. int main(void)
  5. {
  6.     time_t time1;
  7.     
  8.     time(&time1);
  9.     printf("time:\nsec:%ld\n\n",time1);


  10.     struct timeval time2;
  11.     gettimeofday(&time2,NULL);
  12.     /*tv_sec:秒 tv_usec:微秒*/
  13.     printf("gettimeofday:\nsec:%ld,msec:%ld\n",time2.tv_sec,time2.tv_usec);

  14.     return 0;
  15. }

执行后的结果:


下面再看下面的一段代码:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <sys/time.h>

  4. int main(void)
  5. {
  6.     time_t time1;
  7.     time(&time1);
  8.     
  9.     struct tm *time2;
  10.     time2 = gmtime(&time1);

  11.     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",
  12.                     time2->tm_sec,time2->tm_min,time2->tm_hour,
  13.                     time2->tm_mday,time2->tm_mon,time2->tm_year,
  14.                     time2->tm_wday,time2->tm_yday,time2->tm_isdst);
  15.                     
  16.     printf("%ld\n",mktime(time2));
  17.     printf("%s",asctime(time2));

  18.     time2= localtime(&time1);
  19.     
  20.     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",
  21.                         time2->tm_sec,time2->tm_min,time2->tm_hour,
  22.                         time2->tm_mday,time2->tm_mon,time2->tm_year,
  23.                         time2->tm_wday,time2->tm_yday,time2->tm_isdst);

  24.     printf("%ld\n",mktime(time2));
  25.     printf("%s",asctime(time2));


  26.     

  27.     return 0;
  28. }

执行后的结果:


这里要注意gmtime和localtime函数的区别。

与时间相关的函数编程就说到这里的,有兴趣的也可以研究下strftime函数。

阅读(1423) | 评论(0) | 转发(0) |
0

上一篇:网络编程之热身

下一篇:详解fd_set结构体

给主人留下些什么吧!~~