函式
<ctime>

mktime

time_t mktime (struct tm * timeptr);
將 tm 結構體轉換為 time_t
返回一個 time_t 型別的值,該值表示由 timeptr 指向的 tm 結構體所描述的本地時間(該結構體可能會被修改)。

此函式執行與 localtime 相反的轉換。

timeptr 的成員 tm_wdaytm_yday 的值會被忽略,而其他成員的值即使超出其有效範圍也會被解釋(請參見 struct tm)。例如,tm_mday 可以包含大於 31 的值,這些值會被相應地解釋為所選月份最後一天之後的日期。

如果 timeptr 的成員值超出範圍,或者(對於 tm_wdaytm_yday)它們的值與由其他成員描述的日期不匹配,呼叫此函式會自動調整這些成員的值。

引數

timeptr
指向一個 tm 結構體的指標,該結構體包含一個分解為其各組成部分的日曆時間(請參見 struct tm)。

返回值

一個與作為引數傳遞的日曆時間相對應的 time_t 值。
如果日曆時間無法表示,則返回 -1

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* mktime example: weekday calculator */
#include <stdio.h>      /* printf, scanf */
#include <time.h>       /* time_t, struct tm, time, mktime */

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  int year, month ,day;
  const char * weekday[] = { "Sunday", "Monday",
                             "Tuesday", "Wednesday",
                             "Thursday", "Friday", "Saturday"};

  /* prompt user for date */
  printf ("Enter year: "); fflush(stdout); scanf ("%d",&year);
  printf ("Enter month: "); fflush(stdout); scanf ("%d",&month);
  printf ("Enter day: "); fflush(stdout); scanf ("%d",&day);

  /* get current timeinfo and modify it to the user's choice */
  time ( &rawtime );
  timeinfo = localtime ( &rawtime );
  timeinfo->tm_year = year - 1900;
  timeinfo->tm_mon = month - 1;
  timeinfo->tm_mday = day;

  /* call mktime: timeinfo->tm_wday will be set */
  mktime ( timeinfo );

  printf ("That day is a %s.\n", weekday[timeinfo->tm_wday]);

  return 0;
}

輸出

Enter year: 2000
Enter month: 5
Enter day: 20
That day is a Saturday.


資料競爭

timeptr 所指向的物件被訪問,並可能被修改。

異常 (C++)

無異常保證:此函式從不丟擲異常。

另見