linux时间类型localtime_r
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相关推荐
- Linux时间编程三大步骤
一.Linux时间类型 在Linux系统当中,时间分为两种类型:格林威治时间和日历时间. Coordinated Universal Time(UTC)是世界标准的时间,即常说的格林威治标准时间(Gr ...
- linux mysql timestamp_MySQL时间类型Timestamp和Datetime 的深入理解
MySQL数据库常用的时间类型有timestamp和datetime,两者主要区别是占用存储空间长度不一致.可存储的时间也有限制,但针对不同版本下,timestamp字段类型的设置需要慎重,因为不注意 ...
- Linux时间戳 时间类型的转换(转)
[cpp] view plain copy /***************************************************************************** ...
- Linux时间函数札记
关于gmtime.gmtime_r.localtime.localtime_r 测试环境:vmware 7 + Redhat5.5,系统时间使用UTC,时区为上海. 1.函数功能介绍 使用man gm ...
- linux信号子系统,Linux时间子系统之(三):用户空间接口函数
Linux时间子系统之(三):用户空间接口函数 作者:linuxer 发布于:2014-12-24 15:48 分类:时间子系统 一.前言 从应用程序的角度看,内核需要提供的和时间相关的服务有三种: ...
- Linux时间子系统之(一):时间的基本概念【转】
本文转载自:http://www.wowotech.net/timer_subsystem/time_concept.html 本文使用Q & A的方式来和大家以前探讨一下时间的基本概念 一. ...
- Linux时间子系统之三:时间的维护者:timekeeper
专题文档汇总目录 Notes: 原文地址:Linux时间子系统之三:时间的维护者:timekeeper 本系列文章的前两节讨论了用于计时的时钟源:clocksource,以及内核内部时间的一些表示方法 ...
- linux时间调整为dst,Linux上系统时间函数、DST等相关有关问题总结
Linux下系统时间函数.DST等相关问题总结 1. 内核中时间的基本类型: 在Linux内核中,常见的时间类型有以下两种:系统时间(system time)和实时时间(real time),其实,方 ...
- linux时间配置文件,linux系统下的时间配置综述
一.时间类型分为: 1.网络时间(设置时区,ntp服务器同步的时间) 2.系统时间,当前系统所显示的时间 3.硬件(RTC)时间,主板上面Bios的时间 一般设置为:系统时间与网络时间同步,系统时间写 ...
最新文章
- java实现指数分布_Nim 语言编程实现指数分布的随机数
- 【转】OGRE资源相关分析
- TSP问题由标准格式转成简单格式(我的实验代码需要的格式)
- 浏览器输入url后发生了什么?
- 深度学习之递归神经网络(Recurrent Neural Network,RNN)
- LINUX下载编译OpenH264
- STM32F207核心版的LwIP例程的心得
- 推荐一个好用的IDEA插件---Translation—中英互译
- vue 报错:WebSocket connection to ‘ws://192.168.51.116:3000/ws‘ failed:
- 目前住院病人需要护士护理,这样做不仅需要大量护士,而且由于不能随时观察病人情况,还可能会延误抢救时即。某医院呢打算开发一个以计算机为中心的患者监护系统,试写出问题定义,并分析开发这个系统的可行性
- USB连接默认更改为传输文件
- 我参加了资金盘培训,get了这些“知识点”
- 国产自研开源大数据管理平台DataSophon Manager安装教程
- 2019年TI杯 简易电路特性测试仪 制作过程(9)——实际测试效果 20/05/24
- ArcGIS Pro 简介(二)
- log4j 记录日志,数据插入到数据库
- android实现电话通信原理,电话通信原理.pdf
- Spring Cloud中Hystrix的请求合并
- torch.zeros_like()和torch.ones_like()简要介绍
- php 代付功能_PHP之RSA2加密解密(接入微众银行代付功能过程中使用)
热门文章
- 34 FI配置-财务会计-应收账款和应付账款-定义应付汇票的备选统驭科目
- html css div显示隐藏,Html-Css-div透明层剧中
- saiku连mysql 使用_saiku应用的调试
- 30天自制操作系统 pdf_30天自制操作系统:第三天:系统引导完成
- 好轮子收藏:一个支持几乎所有流行格式的图像加载库stb_image.h
- QT配置OpenCV(二):成功
- 2021.08.28-MMsegmentation0.16.0+Cuda10.1+Ubuntu16.04+Pytorch1.8环境安装
- Excel 批量处理行高(图文教程) - Excel篇
- 如何设置(样式渐变)transition
- 自旋锁 Linux内核,Linux内核中的自旋锁