mktime()函数使用

原型:time_t mktime(struct tm *)

其中的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()为负. */
};

我们只要给出年月日时分秒,然后用mktime()就可以,获取的星期存在tm_wday中。

貌似日期写错了也会自动换过来,比如写个1月32号会自己换成2月1号,很强大。

表头文件   #include

定义函数

time_t mktime(struct tm *timeptr);

函数说明

mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0秒算起至今的UTC时间所经过的秒数。

返回值

返回经过的秒数。

范例

/* 用time()取得时间(秒数),利用localtime()
转换成struct tm再利用mktime()将struct tm装换成原来的秒数 */
#include 
#include 
main()
{
    time_t timep;
    struct tm *P;
    time(&timep);
    printf("time() : %d\n", timep);
    p = localtime(&timep);
    timep = mktime(p);
    printf("time()->localtime()->mktime():%d\n", timep);
    //获取时间差
    struct tm tnNormal;
    time_t tNormal;
    tNormal.year = 2010-1900;
    tNormal.tm_mon = 1-1;
    tNormal.tm_mday = 1;
    tNormal.tm_hour = 0;
    tNormal.tm_min = 0;
    tNormal.tm_sec = 0;
    tNormal.tm_isdst = 0;
    tNormal = mktime(&tmNormal);
    time_t tcur = time(0);
    long defferent = difftime(tcur, tNormal);
}
执行
time():974943297
time()->localtime()->mktime():974943297

猜你喜欢

转载自blog.csdn.net/zhangge3663/article/details/83110045