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 known
struct 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;
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。