当前位置: C语言 -- 标准库 -- <wchar.h> -- struct tm

struct tm类型


描述:

该类型包含日历时间的组成部分,称为分解时间(broken-down time),该类型至少包含以下结构成员,结构成员的语义及其范围如注释描述:

int tm_sec; //秒 -- [0,60]
int tm_min; //分 -- [0,59]
int tm_hour; //小时 -- [0,23]
int tm_mday; //每个月的第几天 -- [1,31]
int tm_mon; //自1月以来的月数 -- [0,11]
int tm_year; //自1900年以来的年数
int tm_wday; //自星期天以来的天数 -- [0,6]
int tm_yday; //自1月1日以来的天数 -- [0,365]
int tm_isdst; //夏令时标志

结构成员tm_sec的取值范围为[0,60],这样允许一个正闰秒(leap second)。

如果tm_isdst值为正值,表示夏令时生效;如果tm_isdst值为0,表示夏令时未生效;如果tm_isdst值为负值,表示无法确定夏令时是否生效。

上述成员在结构中的顺序ISO/IEC 9899:2018标准未作明确规定。


范例:
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 
/*类型struct tm范例*/

#include <locale.h>
#include <time.h>
#include <wchar.h>

int main(void)
{
    setlocale(LC_ALL, "");

    const wchar_t *weekDay[] = {                       \
        L"星期日", L"星期一", L"星期二", L"星期三",    \
        L"星期四", L"星期五", L"星期六"                \
    };

    struct tm calendarTime = {0};
    calendarTime.tm_year = 97;
    calendarTime.tm_mon = 6;
    calendarTime.tm_mday = 1;
    calendarTime.tm_hour = 2;

    if(mktime(&calendarTime) == (time_t)(-1))
        wprintf(L"不能表示日历时间。\n");
    else
        wprintf(L"%d年%d月%d日是%ls。\n", (calendarTime.tm_year+1900),  \
                (calendarTime.tm_mon+1), calendarTime.tm_mday,          \
                weekDay[calendarTime.tm_wday]);

    return 0;
}


输出:

1997年7月1日是星期二。


相关内容:
wcsftime 将日历时间格式化为宽字符串的函数。