当前位置: C语言 -- 标准库 -- <time.h> -- mktime

mktime函数


概要:
#include <time.h>
time_t mktime(struct tm *timeptr);

描述:

该函数将参数timeptr指向结构中以当地时间表示的分解时间转换为与time函数返回值具有相同编码的日历时间。

结构成员tm_wdaytm_yday原始值会被忽略;其它结构成员即使超出有效范围,也会被解释,例如:结构成员tm_mday值可能大于31,会被解释为所选月份最后一天之后的天数。成功调用函数后,结构成员tm_wdaytm_yday的值会被合理设置,其它结构成员会被设置成表示指定的日历时间,但它们的值会被强制到有效范围内;在结构成员tm_montm_year的值确定之前,不会设置结构成员tm_mday的值。


参数:
struct tm *timeptr

参数为一个指向struct tm类型对象的指针。


返回值:

函数返回time_t类型值的指定日历时间;如果日历时间不能表示,函数返回(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 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
/*函数mktime范例*/

#include <stdio.h>
#include <time.h>

int main(void)
{
   const char *weekDay[] = {
        "Sunday", "Monday","Tuesday","Wednesday",
        "Thursday","Friday","Saturday"
    };
    const char *month[] = {
         "January", "February", "March", "April",
         "May", "June", "July", "August", "September",
         "October", "November", "December"
    };
    struct tm queryDate = {0};

    /*输入查询的日期。*/
    puts("Enter year: ");
    scanf("%d", &(queryDate.tm_year));
    
    puts("Enter month: ");
    scanf("%d", &(queryDate.tm_mon));
    
    puts("Enter day: ");
    scanf("%d", &(queryDate.tm_mday));
    
    /*将数据处理成struct tm要求的格式。*/
    queryDate.tm_year -= 1900;
    queryDate.tm_mon -= 1;

    /*输出查询日期是星期几。*/
    if(mktime(&queryDate) == (time_t)(-1))
        puts("The calendar time can not be represented.");
    else
        printf("%s %d, %d is %s.\n", month[queryDate.tm_mon],    \
               queryDate.tm_mday, queryDate.tm_year+1900, weekDay[queryDate.tm_wday]);

    return 0;
}


结果:

假设输入:

Enter year:

1975

Enter month:

8

Enter day:

16

将输出:

August 16, 1975 is Saturday.


197011日是一个重要的时间节点,有些实现(例如:GCCVisual Studio)对于这个时间节点之后的日历时间能够正常表示;但之前的日历时间不能正常表示。


相关内容:
struct tm 表示分解时间的结构类型。