Я пытаюсь преобразовать местное время в количество секунд с начала эпохи. Однако не похоже, что mktime() всегда возвращает одно и то же значение для одного и того же ввода.
Вот код:
int TimeCreated;
// ...
printf("%d/%d/%d %d:%d:%d\n",t.tm_year,t.tm_mon,t.tm_mday,t.tm_hour,t.tm_min,t.tm_c);
TimeCreated = mktime(&t);
printf("%d\n",TimeCreated);
printf("%d/%d/%d %d:%d:%d\n",t.tm_year,t.tm_mon,t.tm_mday,t.tm_hour,t.tm_min,t.tm_c);
TimeCreated = mktime(&t);
printf("%d\n",TimeCreated);
Кажется, что каждый раз, когда я запускаю проблему, вывод mktime() изменяется для одного и того же входного значения:
$ ./test1
115/2/28 15:29:1
1427581741
115/2/28 15:29:1
1427581741
$ test1
115/2/28 15:29:1
1427578141
115/2/28 14:29:1
1427578141
На странице руководства говорится: «Функции mktime() и timegm() преобразуют время разбивки (в структуре, на которую указывает *timeptr) в значение времени с той же кодировкой, что и значения, возвращаемые time(3) функция (то есть секунды от эпохи, UTC). Функция mktime() интерпретирует структуру ввода в соответствии с текущими настройками часового пояса (см. tzset (3))", что предполагает, что проблема связана с часовым поясом. Однако часовой пояс установлен правильно.
Если я извлеку только приведенный выше код из более крупной программы, частью которой он является, проблема исчезнет. Я подозреваю, что связывание и вызов функций в jhead
может быть частью проблемы, но, читая страницу карты, я не могу представить, как это могло повлиять на результаты mktime().