首页 > 代码库 > linux获取系统时间
linux获取系统时间
在我的项目中,为了在程序中统计两个进程传递消息的时间,所以需要linux的时间函数。
1 利用time和localtime获取本地事件(精确到s)
#include <time.h>#include <stdio>int main(int argc, char *argv[]){ time_t now; //实例化time_t结构,time_t实际是一个long struct tm *timenow; time(&now); //time函数读取现在的时间(国际标准时间非北京时间),然后传值给now timenow = localtime(&now); //localtime函数把从time取得的时间now换算成你电脑中的时间(就是你设置的地区) int _sec = timenow->tm_sec; int _min = timenow->tm_min; int _hour = timenow->tm_hour; int _day = timenow->tm_mday; int _mon = timenow->tm_mon+1; int _year = timenow->tm_year + 1900; char ct0[30]; sprintf(ct0,"%4d%02d%02d %02d:%02d:%02d",_year,_mon,_day,_hour,_min,_sec); printf("%s",ct0); return 0;}
其中tm的结构是
struct tm {int tm_sec; /* 秒,取值区间为[0,59] */int tm_min; /* 分,取值区间为[0,59] */int tm_hour; /* 时,取值区间为[0,23] */int tm_mday; /* 一个月中的日期,取值区间为[1,31] */int tm_mon; /* 月份(从一月开始,0代表一月),取值区间为[0,11] */int tm_year; /* 年份,其值等于实际年份减去1900 */int tm_wday; /* 星期,取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */int tm_yday; /* 从每年的1月1日开始的天数,取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/};
2 利用mktime获得秒数
time_t mktime(struct tm * timeptr);
mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。
3 利用gettimeofday获取时间(精确到us)
int gettimeofday(struct timeval*tv, struct timezone *tz);//保存时区结果struct timezone{ int tz_minuteswest;/*格林威治时间往西方的时差*/ int tz_dsttime;/*DST时间的修正方式*/};//保存获取时间结果struct timeval{ long int tv_sec; //秒数 long int tv_usec; //微秒数};
一个例子:
#include <time.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>struct timeval tv;/*//在我的机器上如果不加的话会报错//ttime.c:13: error: storage size of ‘tz’ isn’t knownstruct timezone{ int tz_minuteswest; int tz_dsttime; }; struct timezone tz;*/int main(int argc, char *argv[]){ time_t now; struct tm *timenow; time(&now); //gettimeofday(&tv,&tz); gettimeofday(&tv,NULL); printf("%d %d\n",now,tv.tv_sec); printf("%d\n",tv.tv_usec); timenow = localtime(&now); int _usec = tv.tv_usec - (tv.tv_usec/1000)*1000; int _msec = tv.tv_usec/1000; int _sec = timenow->tm_sec; int _min = timenow->tm_min; int _hour = timenow->tm_hour; int _day = timenow->tm_mday; int _mon = timenow->tm_mon+1; int _year = timenow->tm_year + 1900; char ct0[30]; sprintf(ct0,"%4d%02d%02d %02d:%02d:%02d %d %d\n",_year,_mon,_day,_hour,_min,_sec,_msec,_usec); printf("%s",ct0); return 0;}
linux获取系统时间
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。