linux实时时钟相关函数
time
功能:获取1970年1月1日00:00:00到现在的秒数
原型:time_t time(time_t *t);
参数:
t:获取到的秒数
返回:获取到的秒数
说明:在time.h中定义了time_t类型就是long类型。通过形参或返回值获取到的值是一样的。
localtime
功能:将1970年1月1日00:00:00到现在的秒数转换为当地日历时间
原型:struct tm *localtime(const time_t *timep);
参数:
timep:保存秒数的地址
返回:成功返回日历时间结构体指针,失败返回NULL。
struct tm结构为:
struct tm {
int tm_sec; /* seconds */
int tm_min; /* minutes */
int tm_hour; /* hours */
int tm_mday; /* day of the month */
int tm_mon; /* month */
int tm_year; /* year */
int tm_wday; /* day of the week */
int tm_yday; /* day in the year */
int tm_isdst; /* daylight saving time */
};
需要注意的几个点:
1)tm_year是从年开始,tm_mon是从0开始。
2)tm_wday是星期,tm_yday是
3)tm_isdst是指示夏令时在所述时间是否有效的标志。如果夏令时有效,则该值为正值;如果夏令时无效,则该值为零;如果信息不可用,则该值为负值。
测试程序:
#include <stdio.h>
#include <time.h> int main(int argc, const char *argv[])
{
time_t sec;
struct tm *p_tm = NULL; time(&sec);
p_tm = localtime(&sec);
if (p_tm == NULL) {
return ;
} printf("%d-%d-%d %d:%d:%d\n",
p_tm->tm_year + ,
p_tm->tm_mon + ,
p_tm->tm_mday,
p_tm->tm_hour,
p_tm->tm_min,
p_tm->tm_sec);
printf("tm_wday = %d\n", p_tm->tm_wday);
printf("tm_yday = %d\n", p_tm->tm_yday);
printf("tm_isdst = %d\n", p_tm->tm_isdst); return ;
}
执行结果:
gmtime
gmtime与localtime非常相似,区别就是localtime得到的是当地时间,而gmtime得到的是0时区的时间。
功能:功能:将1970年1月1日00:00:00到现在的秒数转换为0时区的日历时间
原型:struct tm *gmtime(const time_t *timep);
参数:
timep:保存秒数的地址
返回:成功返回日历时间,失败返回NULL。
ctime
功能:将时间秒数转化为字符串
原型:char *ctime(const time_t *timep);
参数:
timep:保存秒数的地址
返回:成功返回获得时间的字符串首地址,失败返回NULL。
测试程序:
#include <stdio.h>
#include <time.h> int main(int argc, const char *argv[])
{
time_t sec;
char *p_str = NULL; time(&sec);
p_str = ctime(&sec);
if (p_str == NULL) {
return ;
} printf("%s\n", p_str); return ;
}
asctime
功能:将日历时间结构体转换为字符串时间
原型:char *asctime(const struct tm *tm);
参数:
tm:日历时间地址
返回:成功字符串时间地址,失败返回NULL。
测试程序:
#include <stdio.h>
#include <time.h> int main(int argc, const char *argv[])
{
time_t sec;
struct tm *p_tm = NULL;
char *p_str = NULL; time(&sec);
p_tm = localtime(&sec);
if (p_tm == NULL) {
return ;
} p_str = asctime(p_tm);
if (p_str == NULL) {
return ;
} printf("%s\n", p_str); return ;
}
mktime
功能:将日历时间转换为1970年1月1日00:00:00到现在的秒数
原型:time_t mktime(struct tm *tm);
参数:
tm:日历时间
返回:秒数
小结
各种时间的转换关系如下图所示:
最后提一下,有些函数直接返回一个指针,这种方法不常用,觉得这个指针可能是函数内部动态申请得到的,想着最后要不要用free释放,但是用valgrind检查发现并没有内存泄漏,hhh,具体他怎么实现的就不知道了。
gettimeofday
功能:获取当前时间和时区信息
原型:int gettimeofday(struct timeval *tv, struct timezone *tz);
参数:
tv:时间信息
tz:时区信息
若传入某个参数为NULL表明对该项不感兴趣
返回:成功返回0,失败返回-1
timeval 结构如下:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
其中tv_sec是1970年1月1日00:00:00到现在的秒数,tv_usec则是微秒数。
timezone 结构如下:
struct timezone {
int tz_minuteswest; /* minutes west of Greenwich */
int tz_dsttime; /* type of DST correction */
};
其中tz_minuteswest指的是与Greenwich时间差了多少分钟,tz_dsttime在linux中不使用。
注意使用该函数需要包含头文件sys/time.h
settimeofday
功能:设置当前时间和时区信息
原型:int settimeofday(const struct timeval *tv, const struct timezone *tz);
参数:
tv:时间信息
tz:时区信息
返回:成功执行时,返回0。失败返回-1,errno被设为以下的某个值
EFAULT:tv或tz其中某一项指向的空间不可访问
EINVAL:时区格式无效
EPERM:权限不足,调用进程不允许使用settimeofday设置当前时间和时区值
执行settimeofday函数的进程要有root权限。
linux实时时钟相关函数的更多相关文章
- linux 实时时钟(RTC)驱动【转】
转自:http://blog.csdn.net/yaozhenguo2006/article/details/6820218 这个是linux内核文档关于rtc实时时钟部分的说明,此文档主要描述了rt ...
- 【转】VxWorks中高精度实时时钟的实现及C语言汇编混合编程
最近一个项目中需要在VxWorks下使用一个高精度实时时钟,要求精度为1ms,溢 出时间大于5小时.VxWorks提供系统时钟,该时钟在操作系统启动后开始计数,精度为1个tick,可以通过tickGe ...
- 实时时钟、系统时钟和CPU时钟的区别
http://blog.sina.com.cn/s/blog_68f909c30100pli7.html 实时时钟:RTC时钟,用于提供年.月.日.时.分.秒和星期等的实时时间信息,由后备电池供电,当 ...
- Linux的时钟管理
本文转自博客园zhenwenxian的Linux时间管理,很详细,写得很不错,对初学者还是有很大帮助的. 时间管理在内核中占有非常重要的地位.相对于事件驱动,内核中有大量的函数都是基于时间驱动的.内核 ...
- RTC实时时钟驱动
RTC(Real-Time Clock)实时时钟为操作系统提供了一个可靠的时间,并且在断电的情况下,RTC实时时钟也可以通过电池供电,一直运行下去. RTC通过STRB/LDRB这两个ARM指令向CP ...
- STC8H开发(十三): I2C驱动DS3231高精度实时时钟芯片
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十四): I2C驱动RX8025T高精度实时时钟芯片
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- ASM:《X86汇编语言-从实模式到保护模式》第9章:实模式下中断机制和实时时钟
中断是处理器一个非常重要的工作机制.第9章是讲中断在实模式下如何工作,第17章是讲中断在保护模式下如何工作. ★PART1:外部硬件中断 外部硬件中断是通过两个信号线引入处理器内部的,这两条线分别叫N ...
- RTC实时时钟
作者:宋老师,华清远见嵌入式学院讲师. 1.1 RTC介绍 在 一个嵌入式系统中,通常采用RTC 来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关机状态下它也能够正常工作(通常采用后备 ...
随机推荐
- Springboot 中配置文件的优先级和加载顺序
1. 若application.yml 和bootStrap.yml 在同一目录下,则bootStrap.yml 的加载顺序要高于application.yml,即bootStrap.yml 会优先 ...
- Java核心技术卷一 · 笔记(2)
目录 1.多态.动态绑定 2.覆盖 3.阻止继承:final 类和方法 4.抽象类(abstract修饰) 5. 4 个访问修饰符: 6.toString() 7.对设计继承关系很有帮助的建议 8.接 ...
- linux环境下 python环境import找不到自定义的模块
linux环境下 python环境import找不到自定义的模块 问题现象: Linux环境中自定义的模块swport,import swport 出错.swport模块在/root/sw/目录下. ...
- Confluence 6 针对合并完全失败的内容重新运行合并
如果在系统合并的时候有任何内容的合并失败的话,一个 Confluence 的管理员可以再次重新启动内容合并(请参考前面页面的内容).只有内容还是使用 wiki 格式的才会被合并,因此重新合并所需要的时 ...
- 跟我一步一步写出MongoDB Web 可视化工具(二)
前言 上篇讲了一些基础,主要注重的是查,包括建立数据库链接.获取数据库.获取表.列出数据库.列出表.列出索引.获取数据等. 本篇依然是基础,注重增改删,废话不多说,咱们开始. 进阶 创建一个数据库和一 ...
- FPM五:拆解前面的四——OVP做查询和结果
说明:前面的例子是将list和search放到一个Feeder Class里的,这里来做拆解分步说明. 1.创建SEARCH的结构 2.创建RESULT的结构 表类型(不用表类型的话,需要自己在cla ...
- C语言课设——电影院选票系统
C语言课设--电影院选票系统 1.课题介绍 大家都爱看电影,现请参考一个熟悉电影票预订系统,实现C语言版的订票系统.了解订票如何实现的.系统主要有2类用户:管理员用户和顾客用户. 管理员用户 1.电影 ...
- linux服务器上使用find查杀webshell木马方法
本文转自:http://ju.outofmemory.cn/entry/256317 只要从事互联网web开发的,都会碰上web站点被入侵的情况.这里我把查杀的一些方法采用随记的形式记录一下,一是方便 ...
- day 05字典相关内容
1.day 04内容回顾及作业讲解 列表:增 append insert extend 删 remove pop clear del 改 li[索引]='被修改的内容' li[切片]='被修改的内容' ...
- postman安装
安装包下载下来,解压缩到你喜欢的位置. 打开 Chrome 浏览器的「扩展程序」 点击「加载已解压的扩展程序...」按钮,找到你刚刚下载的安装包的位置,点击确定. 你去看看 Windows 的开始菜单 ...