C时间转换

结构体

结构体struct 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,11] (0代表一月) */ 
    int tm_year;     /* 年份,其值从1900开始 */  
    int tm_wday;     /* 星期–取值区间为[0,6],其中0代表星期天 */  
    int tm_yday;     /* 从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日 */  
    int tm_isdst;     /* 夏令时标识符,实行夏令时的时候,tm_isdst为正;不实行夏令时的进候,tm_isdst为0*/  
    long int tm_gmtoff;     /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/   
    const char *tm_zone;     /*当前时区的名字(与环境变量TZ有关)*/  
};

结构体struct timeval

struct timeval
{    
    long tv_sec;//秒
    long tv_usec;//微妙
};

结构体struct timezone

struct timezone
{
    int tz_minuteswest; /* 和Greewich(格林威治)时间差了多少分钟*/
    int tz_dsttime; /* 日光节约时间的状态 */
}

1、mktime()

struct tm转UTC时间

mktime函数可以在只知道年月日时分秒而不知道tm_wday和tm_yday等参数时,把时间转成UTC时间,然后再使用localtime_r把UTC时间转换回struct tm,就可以得到tm_wday和tm_yday等参数。

struct tm tm_time;
time_t utc_time = mktime(&time);

2、localtime_r()

UTC时间转struct tm

struct tm tm_time;
time_t utc_time;
localtime_r(&utc_time, &tm_time);

3、gettimeofday()

获取当前时间,得到从至今的时间

struct timezone tz;
struct timeval tv;
gettimeofday(&tv, &tz);