В чем разница между этими двумя функциями? Насколько я понимаю, они должны быть одинаковыми: http://www.gnu.org/software/libc/manual/html_node/Broken_002ddown-Time.html.Разница между mktime и timelocal
Я написал этот код, чтобы проверить конверсию (Qt часть только для сравнения):
#include <QCoreApplication>
#include <QDateTime>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QDateTime datetime(QDate(2012, 3, 25), QTime(5, 15));
qDebug("Timestamp: %lld.", datetime.toMSecsSinceEpoch()/1000L);
time_t timestamp;
tm* timeinfo = localtime(×tamp);
timeinfo->tm_hour = 5;
timeinfo->tm_mday = 25;
timeinfo->tm_min = 15;
timeinfo->tm_mon = 2;
timeinfo->tm_year = 112;
timeinfo->tm_sec = 0;
qDebug("Timestamp: %ld.", timelocal(timeinfo));
return 0;
}
и выяснили, что выход:
Timestamp: 1332645300.
Timestamp: 1332645300.
, который является то, что я бы ожидать. Тогда я заменил timelocal
с mktime
и выяснили, что это был выход:
Timestamp: 1332645300.
Timestamp: 1332648900.
Похоже было добавлено в час (считают, что мой текущий часовой пояс GMT + 2: 00 и мой локаль установлена в Италии). Зачем? В чем разница между двумя и почему mktime
добавляет 1 час к дате, которую я установил?
EDIT: Я проверил еще раз, и это, кажется, что на Mac OS X (и IOS) timelocal
возвращается в тот же час, помещенном в timeinfo
структуры, в то время как mktime
на самом деле добавление час как в возвращенном time_t
значения и в структура tm
.
В Linux Kubuntu вместо этого, с обеими функциями, я получаю, что час добавляется и к структуре tm
, и к возвращаемому значению.
Любой, кто может объяснить, почему?
Я скомпилирован с компилятором C++. –
Но вы отметили его как C, поэтому будьте последовательны. Теперь я [запускаю ваш код] (http://ideone.com/M7Ik7), и кажется, что результаты те же ... –
Я добавил некоторые детали к моему вопросу. На какой платформе вы работаете? –