2

我对以下代码有疑问:

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

这将打印“01:00:25”而不是 00:00:25 输出。为什么第一个小时设置为 01 而不是 00 ?

我认为可能使用了 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?你的代码对我来说是“10:00:25”,在 UTC+10 :)

尝试这个:

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 回答