如何找到给定日期的星期几“ tm_wday”?

iam*_*ind 1 c c++ time dayofweek

为了找到给定日期的天(数字),我使用以下代码编写了<ctime>

tm time {ANY_SECOND, ANY_MINUTE, ANY_HOUR, 21, 7, 2015 - 1900};
mktime(&time); //                          today's date                     
PRINT(time.tm_wday);  // prints 5 instead of 2 for Tuesday
Run Code Online (Sandbox Code Playgroud)

根据文档,tm_wday可以保存其中的值[0-6],其中0是星期日。因此,对于星期二(今天),应打印2;但它打印5
实际tm_wday给出一致的结果,但相差3天。
怎么了

Fil*_*ves 5

您输入的月份有误,tm_mon是自一月份以来的偏移量,因此七月是6。从联机帮助页:

tm_mon自一月以来的月数,范围为0到11。

输出2

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

int main(void) {
    struct tm time;
    memset(&time, 0, sizeof(time));

    time.tm_mday = 21;
    time.tm_mon = 6;
    time.tm_year = 2015-1900;

    mktime(&time);

    printf("%d\n", time.tm_wday);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,您应使用memset(3)或类似的命令将其他字段初始化为0 。