0

先说一些理论:

根据 Qt 文档 QDateTime::toSecsFromEpoch() 函数:

将日期时间作为自协调世界时间 1970-01-01T00:00:00.000 以来经过的秒数返回。

和:

[...] 对于所有有效日期,此函数返回一个唯一值。

这是Qt 文档中此特定函数描述的链接。

我的实现

这里有几行代码试图利用这个函数的功能:

#include <QtCore>
#include <iostream>

int main()
{
    QDateTime* time = new QDateTime(QDateTime::currentDateTime());

    QString secs1 = QString::number(time->toSecsSinceEpoch());
    std::cout << secs1.toStdString() << std::endl;

    std::this_thread::sleep_for(std::chrono::milliseconds(10000));

    QString secs2 = QString::number(time->toSecsSinceEpoch());
    std::cout << secs2.toStdString();
}

现在,secs1andsecs2变量应该包含不同的值,但事实并非如此......这是程序的输出:

1601491247
1601491247

等待十秒钟后,值secs2应该不同。我不知道为什么不是。

会不会是 QDateTime 对象的初始化方式错误?或者可能是一些系统相关的错误?我搜索了与我的问题相关的信息,但一无所获。请帮忙。

4

2 回答 2

2

QDateTime 不会不断更新。它存储特定的日期和时间。所以无论你等多久,它总是会给你同样的价值。要修复您的代码,您可以执行以下操作:

    QDateTime time1 = QDateTime::currentDateTime();
    QString secs1 = QString::number(time1.toSecsSinceEpoch());
    std::cout << secs1.toStdString() << std::endl;

    std::this_thread::sleep_for(std::chrono::milliseconds(10000));

    QDateTime time2 = QDateTime::currentDateTime();
    QString secs2 = QString::number(time2.toSecsSinceEpoch());
    std::cout << secs2.toStdString();
于 2020-09-30T18:53:54.767 回答
1

“现在,secs1 和 secs2 变量应该包含不同的值,但事实并非如此......”

不,他们不...

QDateTime不是时钟,它只是一个将任何给定时刻表示为 DateTime 对象的类。

于 2020-09-30T19:00:16.130 回答