这两个功能有什么区别?我理解这些应该是相同的:http://www.gnu.org/software/libc/manual/html_node/Broken_002ddown-Time.html。
我编写了这段代码来测试转换(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小时?
编辑:我再次测试过,似乎在Mac OS X(和iOS)上timelocal
返回timeinfo
结构中的同一小时,而{{{} 1}}实际上在返回的mktime
值和结构time_t
中都添加了一小时。
在Linux Kubuntu上,使用这两个函数,我得到一小时被添加到tm
结构和返回值。
任何可以解释原因的人?