Linux tm time_t timeval timespec以及与时间相关函数用法

一、时间类型

linux中编程通常需要用到时间变量,和相关的时间操作函数。常用的时间类型有:

time_t 、struct  timeval、struct   timespec、struct   tm

在用到相关的类型和函数时,需要加上头文件:#include <time.h>

  • time_t: 存储从1970年到现在经过了多少。格式为long int。UTC时间。
  • struct  timeval:提供秒和微秒单位,最高精度是微秒
/* A time value that is accurate to the nearestmicrosecond but also has a range of years.  */
struct timeval{__time_t tv_sec;		/* Seconds.  */__suseconds_t tv_usec;	/* Microseconds.  */};
# endif	/* struct timeval */
  • struct   timespec:提供秒和纳秒单位,最高精度是纳秒
struct timespec{__time_t tv_sec;		/* Seconds.  */__syscall_slong_t tv_nsec;	/* Nanoseconds.  */};
  • struct   tm:详细时间的结构体
struct tm
{int tm_sec;			/* Seconds.	[0-60] (1 leap second) */int tm_min;			/* Minutes.	[0-59] */int tm_hour;			/* Hours.	[0-23] */int tm_mday;			/* Day.		[1-31] */int tm_mon;			/* Month.	[0-11] */int tm_year;			/* Year	- 1900.  */int tm_wday;			/* Day of week.	[0-6] */int tm_yday;			/* Days in year.[0-365]	*/int tm_isdst;			/* DST.		[-1/0/1]*/# ifdef	__USE_MISClong int tm_gmtoff;		/* Seconds east of UTC.  */const char *tm_zone;		/* Timezone abbreviation.  */
# elselong int __tm_gmtoff;		/* Seconds east of UTC.  */const char *__tm_zone;	/* Timezone abbreviation.  */
# endif
};

二、时间函数

char *asctime(const struct tm* timeptr); 
//将结构中的信息转换为真实世界的UTC时间,以字符串的形式显示char *ctime(const time_t *timep);
//将timep转换为真是世界的时间,以字符串显示,它和asctime不同就在于传入的参数形式不同double difftime(time_t time1, time_t time2);
//返回两个时间相差的秒数int gettimeofday(struct timeval *tv, struct timezone *tz);
//返回当前距离1970年的秒数和微秒数,后面的tz是时区,一般不用struct tm* gmtime(const time_t *timep);
//将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个struct tm结构指针stuct tm* localtime(const time_t *timep);
//和gmtime类似,但是它是经过时区转换的时间。time_t mktime(struct tm* timeptr);
//将struct tm 结构的时间转换为从1970年至今的秒数time_t time(time_t *t);
//取得从1970年1月1日至今的秒数
//eg,totalsec = time(NULL) or time(&totalsec);int clock_gettime(clockid_t clk_id, struct timespec* tp);
/*可以根据需要,获取不同要求的精确时间
参数
clk_id : 检索和设置的clk_id指定的时钟时间。
CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,
中间时刻如果系统时间被用户改成其他,则对应的时间相应改变
CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间*///eg. 获得从开机到现在的时间:clock_gettime(CLOCK_MONOTONIC,&tspec);

三、示例

1、设置系统时间:

struct timeval tv;
tv.tv_sec = (time_t)gps_utctime_sec;  
tv.tv_usec = 0;
if(settimeofday (&tv, NULL) < 0){  MSG("[ GPS ]:Set system datatime error,may need root permissions!\n");  
}
else{MSG("[ GPS ]:GPS valid,update system time!\n");

2、读取当前时间tick

/*! get the current system time tick, second unit */
static uint32_t getCurrSysTick(void)
{time_t timep;time (&timep);return timep;//seconds from 1970-1-1:0:0:0
}

3、读取当前时间字符串:Fri Dec 20 14:44:18 2019

static char* getCurrSysTime(void)
{time_t timep;time (&timep);return asctime(localtime(&timep));
}

4、设置延时

static void delay_ms(unsigned int dms)
{struct timespec sleeper, dummy ;sleeper.tv_sec  = (time_t)(dms / 1000) ;sleeper.tv_nsec = (long)(dms % 1000) * 1000000 ;nanosleep (&sleeper, &dummy);//delay 1ms
}

5、获取当前时间tm

struct tm* t_tm; 
t_tm = localtime((time_t *)&meas_gps_utctime.tv_sec);
/* test gps */
MSG("today is %4d-%02d-%02d %02d:%02d:%02d\n",t_tm->tm_year+1900,t_tm->tm_mon+1,t_tm->tm_mday,t_tm->tm_hour,t_tm->tm_min,t_tm->tm_sec);  

 

Linux时间转换图:

 

 

参考:

  1. c++ 时间类型详解 time_t
  2. linux应用time和timezone
  3. linux下的clock_gettime()获取时间函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache的prefork模式和worker模式

prefork模式 这个多路处理模块(MPM)实现了一个非线程型的、预派生的web服务器&#xff0c;它的工作方式类似于Apache 1.3。它适合于没有线程安全库&#xff0c;需要避免线程兼容性问题的系统。它是要求将每个请求相互独立的情况下最好的MPM&#xff0c;这样若一个请求出现问题就…

[react] 说说Context有哪些属性?

[react] 说说Context有哪些属性&#xff1f; context属于一种解决组件间层级过多传递数据的问题&#xff0c;避免了层层嵌套的通过props传递的形式&#xff0c;同时对于不需要使用到redux时&#xff0c;是一种解决方案&#xff0c;关于组件的复用性变差的问题&#xff0c;我觉…

艾泰路由器设置虚拟服务器,艾泰路由器设置步骤

艾泰路由器设置步骤艾泰科技路由器默认配置完之后就可以上网&#xff0c;内网私网地址通过WAN口的"NAT转换来上网。但某些特殊时候却不需要NAT模式&#xff0c;用户需要纯路由模式来转发&#xff0c;下面是小编整理的相关内容&#xff0c;欢迎阅读参考&#xff01;ReOS V2…

ubuntu 安装(install) pwntcha[一个做验证码识别的开源程序]

一、安装 1. sudo apt-get install libsdl1.2-dev libsdl1.2debian sudo apt-get install libsdl1.2-dev(比较大&#xff0c;10M左右) sudo apt-get install libsdl-image1.2-dev sudo apt-get install libsdl-mixer1.2-dev sudo apt-get install libsdl-ttf2.0-dev sudo apt-g…

IIS出现The specified module could not be found解决方法

From: http://www.cnblogs.com/hanxianlong/archive/2008/10/25/1319269.html 打开IIS 信息服务&#xff0c;在左侧找到自己的计算机&#xff0c;点右键&#xff0c;选择属性&#xff0c;在主属性中选编辑&#xff0c;打开“目录安全性”选项卡&#xff0c;单击“匿名访问和验…

嵌入式开发中模拟SPI的驱动

这里贴一下自己的模拟SPI驱动&#xff0c;移植的话需要实现SPI管脚的定义和初始化。 一、管脚初始化 MOSI_PIN&#xff1a;设置MOSI为输出模式SCK_PIN&#xff1a;设置SCK为输出模式CSN_PIN&#xff1a;设置CSN为输出模式MISO_PIN&#xff1a;设置MISO为输入模式MOSI_PIN_HIG…

开始整理资料

现在想想为什么这么晚才在CSDN安家&#xff0c;如果大一的时候就开始写博客了&#xff0c;记录生活的点点滴滴&#xff0c;那该有多好。 回去以前做过的许多事情&#xff0c;总是一知半解&#xff0c;如果当时能够想到写博客&#xff0c;那么理解程度就不是现在这个样子了。 知…

[react] 你有使用过React Intl吗?

[react] 你有使用过React Intl吗&#xff1f; 一种react国际化的解决方案 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题 个人简介 我是歌谣&#xff0c;欢迎和…

C语言编程对缓冲区的理解

解析C语言编程对缓冲区的理解 转载自&#xff1a;http://soft.chinabyte.com/database/47/12481547.shtml 下面介绍缓冲区的知识。 一、什么是缓冲区 缓冲区又称为缓存&#xff0c;它是内存空间的一部分。也就是说&#xff0c;在内存空间中预留了一定的存储空间&#xff0c;这些…

ftp文档服务器设置,ftp服务器基本设置

ftp服务器基本设置 内容精选换一换在迁移Agent中输入华为云账号AK/SK以后&#xff0c;AK/SK校验失败。Windows系统提示用户&#xff1a;"AK/SK authentication failed. Ensure that the system time is consistent with the standard time and the AK and SK are corre服务…

浅谈进程间的消息传递

From: http://blog.csdn.net/handsomewang527/article/details/1676259 随着我们开发的应用的日益复杂&#xff0c;像以往那样将所有功能坐在一个exe文件中情况越来越少&#xff0c;更多时候是整个应用由若干模块、甚至若干单独的exe文件组成&#xff0c;这就涉及到了模块或进…

树莓派移植SX1278 LoRa通信--使用wiringPiSPI移植SPI通信接口

一、SPI接口 树莓派3B上的SPI接口如下所示&#xff0c;有两组SPI&#xff0c;分别由CE0和CE1来进行选择。 首先查看树莓派的SPI是否启用&#xff0c;在/dev查看是否有spidev0.0和spidev0.1 如果不存在spi设备号&#xff0c;需要在raspi-config中启用&#xff0c;在命令行输入&…

能说明你的Javascript技术很烂的五个原因

Javascript在互联网上名声很臭&#xff0c;但你又很难再找到一个像它这样如此动态、如此被广泛使用、如此根植于我们的生活中的另外一种语言。它的低学习门槛让很多人都称它为学前脚本语言&#xff0c;它另外一个让人嘲笑的东西是动态语言的概念是偏偏使用了高标准的静态数据类…

[react] 除了实例的属性可以获取Context外哪些地方还能直接获取Context呢?

[react] 除了实例的属性可以获取Context外哪些地方还能直接获取Context呢&#xff1f; Context React.createContext<Context.Provider value{contextValue}> child </Context.Provider>使用 组件式: <Context.Consumer>{contextValue > ...}</Conte…

饥荒专用服务器全图显示代码,饥荒开全图代码

用记事本打开游戏目录\data\DLC0001\scripts\prefabs\player_common.lua文件&#xff0c;在inst:AddComponent("resurrectable")下一行插inst:AddComponent("resurrectable")下一行插入以下内容&#xff1a;  TheInput:AddKeyUpHandler(KEY_1&#xff0c…

树莓派移植SX1278 LoRa通信--使用wiringPi 移植GPIO中断

一、SX1278 数字接口状态映射 从官方文档可知sx1278的数字接口状态映射明细&#xff0c;移植的代码中主要用查询的方式来判断在连续模式下是否接收和发送完成&#xff0c;因此只需要用到DIO0。如果要用到CAD&#xff0c;则需要DIO1管脚。 发送时&#xff1a;DioMapping1寄存器…

linux系统中如何查看日志 (常用命令2)

cat tail -f 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志&#xff0c;是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全相关的日志信息 /var/log/maillog 与邮件相关的日志信息 /var/log/cron 与定时任务相关的日志信息 /var/log/spooler 与…

VMware View 与 Citrix Xendesktop 管理大比拼

一篇写得非常不错的博文&#xff0c;从管理角度来对比虚拟桌面产品的差异&#xff0c;而这一点往往被代理商和用户忽略&#xff0c;值得花时间看看。 大部分用户决定使用桌面虚拟化的最大原因是简化管理。我深刻的记得2006年在X福记用户那推补丁管理软件时&#xff0c;结…

[react] childContextTypes是什么?它有什么用?

[react] childContextTypes是什么&#xff1f;它有什么用&#xff1f; childContextTypes用来定义context数据类型&#xff0c;该api从16.3开始已被废弃 使用方式 class MessageList extends React.Component {getChildContext() {return {color: "purple"};}rend…

readdirectorychangesw 链接错误 undeclared identifier 解决方法

From: http://aaronaddis.blog.163.com/blog/static/1270893292010431101042517/ 今天在编程中遇到了文件监控的东西&#xff0c;在使用readdirectorychangesw 函数是老是报未定义的错误&#xff0c;看了MSDN&#xff0c;包含了windows.h和Winbase.h 两个头文件&#xff0c;但…