如何在给定日期找到一周中的某一天`tm_wday`?

时间:2015-07-21 12:15:16

标签: 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

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

2 个答案:

答案 0 :(得分:5)

你错了一个月,tm_mon是自1月以来的偏移,所以7月是6.从联机帮助页:

  

tm_mon自1月以来的月数,范围为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;
}

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

答案 1 :(得分:0)

您获得无效输出的原因是您使用的是错误的月份。 tm_mon从0开始而不是1.您可以使用以下代码查看tghis:

tm time {50, 50, 12, 21, 7, 2015 - 1900};
time_t epoch = mktime(&time);
printf("%s", asctime(gmtime(&epoch)));

输出:

Fri Aug 21 12:50:50 2015

Live Example