2

次のコードに問題があります:

QDateTime test2;
test2.setTime_t(25);
qDebug() << test2.toString("hh:mm:ss");

これにより、00:00:25の代わりに「01:00:25」が出力されます。最初の時間が00ではなく01に設定されているのはなぜですか?

多分am/pm表記が使われていると思ったので、これを試してみました

QDateTime test2;
test2.setTime_t(3600*22+25);
qDebug() << test2.toString("hh:mm:ss");

それでも私は出力で受け取りました

「23:00:25」

ヘルプ :)

4

2 に答える 2

6

これは、QDateTimeをUTCに設定しなかったためです。つまり、UTC時間の1970年1月1日の00:00:25は、ローカルタイムゾーンではおそらく01:00:25でしたか?そして、あなたのコードは、UTC+10で私にとって「10:00:25」と言っています:)

これを試して:

QDateTime test2;
test2.setTimeSpec(Qt::UTC);    
test2.setTime_t(25);
qDebug() << test2.toString("hh:mm:ss");
于 2011-04-05T22:36:14.190 に答える
2

付け加えると、UTCがあなたを台無しにしているようです。出力の最後の行を確認してください。

#include <QCoreApplication>
#include <QDateTime>
#include <QDebug>

int main(int argc, char **argv)
{
    QCoreApplication app(argc, argv );

    QDateTime test1;
    test1.setTime_t(25);
    qDebug() << "Local 1: " << test1.toString("hh:mm:ss");
    qDebug() << "Local 1: " << test1.toString();
    qDebug() << "UTC   1: " << test1.toUTC().toString();

    QDateTime test2;
    test2.setDate(QDate(1970,01,01));
    test2.setTime(QTime(00,59));
    qDebug() << "Local 2: " << test2.toString("hh:mm:ss");
    qDebug() << "Local 2: " << test2.toString();
    qDebug() << "UTC   2: " << test2.toUTC().toString();

    return 0;
}

出力:

Local 1:  "01:00:25" 
Local 1:  "Thu Jan 1 01:00:25 1970" 
UTC   1:  "Thu Jan 1 00:00:25 1970" 
Local 2:  "00:59:00" 
Local 2:  "Thu Jan 1 00:59:00 1970" 
UTC   2:  "Wed Dec 31 23:59:00 1969" 

PS:私はUTC+1にいます

于 2011-04-06T11:05:42.023 に答える