Почему mktime () меняет день года моей структуры tm?

Я читаю в двух строках с годом, Юлианским днем (Днем года), часом, минутой и наблюдением.

я вытаскиваю соответствующие переменные с помощью sscanf:

sscanf(tide_str1.c_str(), "%d %d %d %d %Lf", &y1, &j1, &h1, &m1, &obs1);
sscanf(tide_str2.c_str(), "%d %d %d %d %Lf", &y2, &j2, &h2, &m2, &obs2);

для этого конкретного набора данных, значения 083 2011 23 22 1.1

затем я создаю и заполняю структуру tm и запускаю mktime с вызовами cout в день между ними, и он изменяется от 083 до 364.

int y1=2011, j1=83, h1=23, m1=22;
struct tm time_struct = {0, 0, 0, 0, 0, 0, 0, 0, 0}, *time_ptr = &time_struct;
time_t tv_min;
time_struct.tm_year = y1 - 1900;
time_struct.tm_yday = j1;
cout << time_struct.tm_yday << endl;
time_struct.tm_hour = h1;
time_struct.tm_min = m1;
time_struct.tm_isdst = -1;
cout << time_struct.tm_yday << endl;
tv_min = mktime(time_ptr);
cout << time_struct.tm_yday << endl;

почему это? Это потому, что tm_mday и tm_mon значение 0? Сначала я попытался не инициализировать все это до нуля, но затем mktime вернул -1. Что я должен делать по-другому, если я знаю только год, а не месяц и день?

1 ответов


mktime() делает то, что он должен делать.

цитируя стандарт C:

на функцией mktime функция преобразует время разбиения, выраженное как местное время, в структуре, указанной timeptr в календарь значение времени с той же кодировкой, что и значения, возвращаемые the времени