これら2つの機能の違いは何ですか?それらは同じでなければならないというのが私の理解でした: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.
1時間が追加されたようです(現在のタイムゾーンがGMT + 2:00で、ロケールがイタリアに設定されていることを考慮してください)。なんで?2つの違いは何mktime
ですか?また、設定した日付に1時間を追加するのはなぜですか?
編集:もう一度テストしたところ、Mac OS X(およびiOS)では、構造体にtimelocal
配置された同じ時間が返されているようですが、実際には、戻り値と構造体の両方に1時間が追加されています。timeinfo
mktime
time_t
tm
代わりにLinuxKubuntuでは、両方の関数を使用すると、tm
構造体と戻り値の両方に1時間が追加されます。
理由を説明できる人はいますか?