Чтобы найти день (число) для данной даты, я написал код ниже, используя <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; но это отпечатки 5.
На самом деле tm_wday
дает последовательные результаты, но с разницей в 3 дня.
Что здесь не так?
Вы ошиблись месяцем, tm_mon
это смещение с января, поэтому июль равен 6. С man-страницы:
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;
}
Обратите внимание, что вы должны инициализировать остальные поля с 0 memset(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