linux下的时间编程
来源:互联网 发布:mysql存储emoji乱码 编辑:程序博客网 时间:2024/06/05 16:21
在做linux下的应用程序时,我们经常需要获取当前的系统时间或者进行时间的计算,这时候需要用到linux下的时间函数。
1. 几个时间的概念区分
(1) 格林威治时间
格林威治时间也即格林尼治标准时间(旧译格林尼治平均时间或格林威治标准时间;英语:Greenwich MeanTime,GMT),是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间。这个时间是世界统一的,然后不同国家根据自己的经度进行换算来得到本地时间,比如:格林威治时间+8小时=北京时间。
(2) 日历时间
日历时间(calender time),是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。
这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以
说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的,也即"日历时间"跟时区无关,只跟系统类型有关。
在linux中,一般用1970年1月1日0点作为“标准时间”。
(3) 本地时间
本地时间是跟时区紧密相关的,在所有的机器上,格林威治时间是相同的,然后根据机器所在的时区来确定本地时间。
2. 时间函数里用到的数据类型
要使用到时间编程函数,需要在包含头文件time.h
然后我们需要先了解下几个有关时间的数据类型。
time_t:定义时间变量 struct timeval { int tv_sec; //用来存放秒数 int tv_usec; //用来存放微秒 } struct tm { int tm_sec; //秒 int tm_min; //分 int tm_hour; //时 int tm_mday; //本月第几日 int tm_mon; //本年第几月 int tm_year; //相对值,需要+1900才得到真实值 int tm_wday; //本周第几日 int tm_yday; //本年第几日 int tm_isdst; //日光节约时间 };3.时间函数说明
(1)time_t time(time_t *tloc)
获取日历时间,在linux中,即是从1970年1月1日0点到现在所经历的秒数。
(2)struct tm *gmtime(const time_t *timep)
将日历时间转化为格林威治,并保存至tm结构。
(3)struct tm * localtime(const time_t *timep)
将日历时间转化为本地时间,并保存至tm结构。该函数将会检测你设置的你所在的时区,然后计算本地时间。
(4)char *asctime(const struct tm *tm)
将tm格式的时间转化为字符串。
我们如果直接使用tm结构体,是不方便的,所以有必要将她转化成字符串的形式,比如我们要打印时间时,先将时间转化成字符串将方便我们的打印。
注意,这个tm保存的可以是日历时间,也可以保存格林威治时间。
(5)char *ctime(const time_t *timep)
将日历时间转化为本地时间的字符串。
(6)int gettimeofday(struct timeval *tv, struct timezone *tz)
获取从今日凌晨到现在的时间差,常用于时间耗时计算。
4. 时间编程实例
#include <sys/time.h>#include <stdio.h>int main(char argc,char argv[]){ struct tm *tm_p; struct timeval tv1; struct timeval tv2; time_t loc_t; int i,j; loc_t=time(NULL);//获取日历时间 printf("Cal_time is:%d \n",loc_t);//打印日历时间 tm_p=gmtime(&loc_t);//将日历时间转化成格林威治时间 printf("GMT is:%s \n",asctime(tm_p));//打印格林威治时间 printf("Local time is:%s \n",ctime(&loc_t));//将日历时间转化成本地时间的字符串形式,并打印 gettimeofday(&tv1,NULL); for(i=0;i<60000;i++);//循环来流逝时间 gettimeofday(&tv2,NULL); printf("cost time is:%d \n",(tv2.tv_usec)-(tv1.tv_usec) );//计算流逝的微秒数 return 0;}/********************************************END****************************************************/
运行后的结果如下:
5. 总结
有关linux里的时间函数,需要调用到内核提供的系统调用,有关内核里的具体实现有时间再仔细研究。
注:本文章纯属个人的学习总结笔记,不保证文章的正确性。
- linux下的时间编程
- linux下时间编程
- linux下时间编程
- Linux下时间编程
- 关于Linux下时间编程的问题
- Linux 下的时间编程总结
- Linux操作系统下C语言编程的时间概念
- Linux下c语言编程的时间函数详解
- Linux下的时间
- Linux下的时间
- Linux下C语言编程--时间概念
- Linux下C语言编程--时间概念
- Linux下C语言编程--时间概念
- Linux下C语言编程--时间概念
- Linux下C语言编程--时间概念
- Linux下C语言编程--时间概念
- linux下socket编程之时间服务器
- Linux下C语言编程--时间概念
- 敏捷开发一千零一问系列之二十:怎样持续改进?(兼谈共振)
- iCade Mobile:让iPhone变身掌上游戏机
- 敏捷开发一千零一问系列之二十一:怎样写设计?(教育软件案例)
- Android 布局----让一个控件居底部
- 敏捷开发一千零一问系列之二十二: UI设计怎么做到敏捷呢?(兼谈对UI热的理解)(上)
- linux下的时间编程
- 推荐top 10源代码搜索引擎
- 敏捷开发一千零一问系列之二十四: UI设计怎么做到敏捷呢?(兼谈对UI热的理解)(下)
- PHP代码的优化
- C#调用MATLAB的COM组件
- 关于ArcGIS API for JavaScript与Dojo
- linux 创建桌面方式
- HTML5手机的春天, Web Apps来袭
- pmon启动流程