linux时间类型localtime_r,struct tm *p

gettimeofday(&now ,NULL);取得当前时间的参数值,now可以是struct timespec 或者 struct timeval

类型的。 
mktime函数原型:

定义函数 
  time_t mktime(struct tm * timeptr); 
函数说明 
  mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。 
返回值 
  返回经过的秒数。

localtime_r( time_t *t,struct tm *tm )函数功能与此相同,但是它可以将数据存储到用户提供的结构体中。是线程安全的,推荐使用它。它不需要设置tzname。

一、时间类型。 
Linux下常用的时间类型有4个:time_t,struct timeval,struct timespec,struct tm。

gmtime() 函数将日历时间timep转换为用UTC时间表示的时间。它可能返回NULL,比如年份不能放到一个整数中。返回值指向一个静态分配的结构,该结构可能会被接下来的任何日期和时间函数调用覆盖。gmtime_r()函数功能与此相同,但是它可以将数据存储到用户提供的结构体中。 
localtime() 函数将日历时间timep转换为用户指定的时区的时间。这个函数的行为好像是它调用了tzset(3) 并且将外部变量tzname设置为当前时区的信息,将timezone设为UTC和本地标准时间的差值,并且,如果在一年的部分时间使用日光节约规则时将daylight设置为非空值。返回值指向一个静态分配的结构,该结构可能会被接下来的任何日期和时间函数调用覆盖。localtime_r()函数功能与此相同,但是它可以将数据存储到用户提供的结构体中。它不需要设置tzname。 
(1)time_t是一个长整型,一般用来表示用1970年以来的秒数。 
(2)Struct timeval有两个成员,一个是秒,一个是微妙。 
struct timeval 

long tv_sec; 
long tv_usec; 
}; 
(3)struct timespec有两个成员,一个是秒,一个是纳秒。 
struct timespec 

time_t tv_sec; 
long tv_nsec; 
}; 
(4)struct tm是直观意义上的时间表示方法: 
struct tm 

int tm_sec; 
int tm_min; 
int tm_hour; 
int tm_mday; 
int tm_mon; 
int tm_year; 
int tm_wday; 
int tm_yday; 
int tm_isdst; 
}; 
二、 时间操作 
(1) 时间格式间的转换函数 
主要是 time_t、struct tm、时间的字符串格式之间的转换。看下面的函数参数类型以及返回值类型: 
char *asctime(const struct tm *tm); 
char *ctime(const time_t *timep); 
struct tm *gmtime(const time_t *timep); 
struct tm *localtime(const time_t *timep); 
time_t mktime(struct tm *tm); 
gmtime和localtime的参数以及返回值类型相同,区别是前者返回的格林威治标准时间,后者是当地时间。 
(2) 获取时间函数 
两个函数,获取的时间类型看原型就知道了: 
time_t time(time_t *t); 
int gettimeofday(struct timeval *tv, struct timezone *tz); 
前者获取time_t类型,后者获取struct timeval类型,因为类型的缘故,前者只能精确到秒,后者可以精确到微秒。 
三、延时函数 
主要的延迟函数有:sleep(),usleep(),nanosleep(),select(),pselect(). 
unsigned int sleep(unsigned int seconds); 
void usleep(unsigned long usec); 
int nanosleep(const struct timespec *req, struct timespec *rem); 
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,struct timeval *timeout); 
int pselect(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask);

alarm函数是信号方式的延迟,这种方式不直观,这里不说了。 
仅通过函数原型中时间参数类型,可以猜测sleep可以精确到秒级,usleep/select可以精确到微妙级,nanosleep和pselect可以精确到纳秒级。 
而实际实现中,linux上的nanosleep和alarm相同,都是基于内核时钟机制实现,受linux内核时钟实现的影响,并不能达到纳秒级的精度,man nanosleep也可以看到这个说明,man里给出的精度是:Linux/i386上是10 ms ,Linux/Alpha上是1ms。 
这里有一篇文章http://blog.csdn.net/zhoujunyi/archive/2007/03/30/1546330.aspx,测试了不同延迟函数之间的精确度。文章给出的结论是linux上精度最高的是select,10ms级别。我在本机器测试select和pselect相当,都达到了1ms级的精度,精度高于文章中给出的10ms,sleep在秒级以上和usleep/nanosleep相当。下面贴下我机器上1ms时候的测试结果,其他不贴了: 
sleep 1000 0 -1000 
usleep 1000 2974 1974 
nanosleep 1000 2990 1990 
select 1000 991 -9 
pselect 1000 990 -10 
gettimeofday 1000 1000 0 
而使用gettimeofday循环不停检测时间,可精确微秒级,不过不适宜用来做定时器模块。 
因此后面的定时器模块将选择select为延迟函数。

http://blog.sina.com.cn/s/blog_9b0604b4010130tr.html

linux时间类型localtime_r相关推荐

  1. Linux时间编程三大步骤

    一.Linux时间类型 在Linux系统当中,时间分为两种类型:格林威治时间和日历时间. Coordinated Universal Time(UTC)是世界标准的时间,即常说的格林威治标准时间(Gr ...

  2. linux mysql timestamp_MySQL时间类型Timestamp和Datetime 的深入理解

    MySQL数据库常用的时间类型有timestamp和datetime,两者主要区别是占用存储空间长度不一致.可存储的时间也有限制,但针对不同版本下,timestamp字段类型的设置需要慎重,因为不注意 ...

  3. Linux时间戳 时间类型的转换(转)

    [cpp] view plain copy /***************************************************************************** ...

  4. Linux时间函数札记

    关于gmtime.gmtime_r.localtime.localtime_r 测试环境:vmware 7 + Redhat5.5,系统时间使用UTC,时区为上海. 1.函数功能介绍 使用man gm ...

  5. linux信号子系统,Linux时间子系统之(三):用户空间接口函数

    Linux时间子系统之(三):用户空间接口函数 作者:linuxer 发布于:2014-12-24 15:48 分类:时间子系统 一.前言 从应用程序的角度看,内核需要提供的和时间相关的服务有三种: ...

  6. Linux时间子系统之(一):时间的基本概念【转】

    本文转载自:http://www.wowotech.net/timer_subsystem/time_concept.html 本文使用Q & A的方式来和大家以前探讨一下时间的基本概念 一. ...

  7. Linux时间子系统之三:时间的维护者:timekeeper

    专题文档汇总目录 Notes: 原文地址:Linux时间子系统之三:时间的维护者:timekeeper 本系列文章的前两节讨论了用于计时的时钟源:clocksource,以及内核内部时间的一些表示方法 ...

  8. linux时间调整为dst,Linux上系统时间函数、DST等相关有关问题总结

    Linux下系统时间函数.DST等相关问题总结 1. 内核中时间的基本类型: 在Linux内核中,常见的时间类型有以下两种:系统时间(system time)和实时时间(real time),其实,方 ...

  9. linux时间配置文件,linux系统下的时间配置综述

    一.时间类型分为: 1.网络时间(设置时区,ntp服务器同步的时间) 2.系统时间,当前系统所显示的时间 3.硬件(RTC)时间,主板上面Bios的时间 一般设置为:系统时间与网络时间同步,系统时间写 ...

最新文章

  1. java实现指数分布_Nim 语言编程实现指数分布的随机数
  2. 【转】OGRE资源相关分析
  3. TSP问题由标准格式转成简单格式(我的实验代码需要的格式)
  4. 浏览器输入url后发生了什么?
  5. 深度学习之递归神经网络(Recurrent Neural Network,RNN)
  6. LINUX下载编译OpenH264
  7. STM32F207核心版的LwIP例程的心得
  8. 推荐一个好用的IDEA插件---Translation—中英互译
  9. vue 报错:WebSocket connection to ‘ws://192.168.51.116:3000/ws‘ failed:
  10. 目前住院病人需要护士护理,这样做不仅需要大量护士,而且由于不能随时观察病人情况,还可能会延误抢救时即。某医院呢打算开发一个以计算机为中心的患者监护系统,试写出问题定义,并分析开发这个系统的可行性
  11. USB连接默认更改为传输文件
  12. 我参加了资金盘培训,get了这些“知识点”
  13. 国产自研开源大数据管理平台DataSophon Manager安装教程
  14. 2019年TI杯 简易电路特性测试仪 制作过程(9)——实际测试效果 20/05/24
  15. ArcGIS Pro 简介(二)
  16. log4j 记录日志,数据插入到数据库
  17. android实现电话通信原理,电话通信原理.pdf
  18. Spring Cloud中Hystrix的请求合并
  19. torch.zeros_like()和torch.ones_like()简要介绍
  20. php 代付功能_PHP之RSA2加密解密(接入微众银行代付功能过程中使用)

热门文章

  1. 34 FI配置-财务会计-应收账款和应付账款-定义应付汇票的备选统驭科目
  2. html css div显示隐藏,Html-Css-div透明层剧中
  3. saiku连mysql 使用_saiku应用的调试
  4. 30天自制操作系统 pdf_30天自制操作系统:第三天:系统引导完成
  5. 好轮子收藏:一个支持几乎所有流行格式的图像加载库stb_image.h
  6. QT配置OpenCV(二):成功
  7. 2021.08.28-MMsegmentation0.16.0+Cuda10.1+Ubuntu16.04+Pytorch1.8环境安装
  8. Excel 批量处理行高(图文教程) - Excel篇
  9. 如何设置(样式渐变)transition
  10. 自旋锁 Linux内核,Linux内核中的自旋锁