如何从给定日期找到星期几 `tm_wday`?
How to find the day of the week `tm_wday` from a given date?
要查找给定日期的日期(数字),我使用 <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 天。
这里有什么问题?
您得到无效输出的原因是您使用了错误的月份。 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
你弄错了月份,tm_mon
是从一月开始的偏移量,所以七月是 6。来自联机帮助页:
tm_mon The number of months since January, in the range 0 to 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。
要查找给定日期的日期(数字),我使用 <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 天。
这里有什么问题?
您得到无效输出的原因是您使用了错误的月份。 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
你弄错了月份,tm_mon
是从一月开始的偏移量,所以七月是 6。来自联机帮助页:
tm_mon The number of months since January, in the range 0 to 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。