這兩個函數有什麼區別?這是我的理解,那些應該是相同的: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個小時到我設置的日期?
編輯:我再次測試,它似乎在Mac OS X(和iOS)timelocal
將返回放在timeinfo
結構的同一時間,而mktime
實際上都在返回time_t
值和增加一小時結構tm
。
在Linux上,Kubuntu代替了這兩個函數,我得到的結果是tm
結構和返回值都加了一個小時。
任何人都可以解釋爲什麼?
我用C++編譯器編譯。 –
但是你把它標記爲C,所以要一致。現在,我[運行你的代碼](http://ideone.com/M7Ik7),看起來結果是一樣的... –
我在我的問題中增加了一些細節。你在哪個平臺上運行? –