函数
<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++)

无异常保证:此函数从不抛出异常。

另见