Chinaunix首页 | 论坛 | 博客
  • 博客访问: 573545
  • 博文数量: 50
  • 博客积分: 571
  • 博客等级: 中士
  • 技术积分: 1162
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-20 14:01
个人简介

希望成为一个有思想,有信仰的程序设计师。

文章分类

全部博文(50)

文章存档

2016年(2)

2015年(2)

2014年(13)

2013年(10)

2012年(23)

分类: C/C++

2013-09-13 09:02:50

一、预备知识:
24时区,GMT,UTC,DST,CST时间详解:
二、时间相关的函数汇总:
1.获取时间的的函数:time、gettimeofday、clock_gettime 
2.时间转换的函数:asctime, ctime, gmtime, localtime, mktime, asctime_r, ctime_r, gmtime_r, localtime_r 
3.时间设置函数:settimeofday
4.计算程序运行时间相关函数:clock、times、clock_gettime(实时函数,也可以用做获取当前时间)

三、时间获取函数的精度分析:
time()函数的精确度是1s
clock()函数的精确度是10毫秒(ms)
times()函数的精确度是10毫秒(ms)
gettimofday()函数的精确度是微秒(μs)
clock_gettime()函数的计量单位为十亿分之一,也就是纳秒(ns)
四、时间转换函数分析
1.asctime, ctime, gmtime, localtime与
 asctime_r, ctime_r, gmtime_r, localtime_r 区别在于有_r的函数是线程安全的函数,而没有_r的函数是线程不全的的。在多线程编程的时候要注意。
2.gmtime和localtime的区别
gmtime和时区无关,总是获取是GMT0(和UTC0相同)的时间,同时夏日节约时间DST的时间偏移也为0.而localtime获取的时间包含了时区偏移。具体分析见附录1.
2.ctime相当于localtime与asctime的组合。
3.mktime将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数,相当于time()的逆操作。

下一节主要介绍如何利用setenv、putenv来使得不同的进程获取不同的时区时间。
参考资料:

附录1:
gmtime和localtime的在glibc中的区别

在glibc2.18中,localtime和gmtime都是调用__tz_convert和__offtime 实现的。

struct tm *__tz_convert (const time_t *timer, int use_localtime, struct tm *tp);

其中use_localtime就是用来是标志是否和本地时区相关联。
下面是gmtime和localtime的定义:

struct tm *gmtime (t)
     const time_t *t;
{
  return __tz_convert (t, 0, &_tmbuf);
}
struct tm *
localtime (t)
     const time_t *t;
{
  return __tz_convert (t, 1, &_tmbuf);
}

参考资料:glibc-2.18源码

说明:对于函数gmtime和localtime在glibc-2.18和glibc-1.09实现有点不同。

阅读(7573) | 评论(0) | 转发(4) |
给主人留下些什么吧!~~