1. 程式人生 > >mktime()函式使用

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