QDateTime::toSecsSinceEpoch() 似乎不起作用

QDateTime::toSecsSinceEpoch() seems not to work

先讲一些理论:

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

Returns the datetime as the number of seconds that have passed since 1970-01-01T00:00:00.000, Coordinated Universal Time.

和:

[...] for all valid dates, this function returns a unique value.

这是 link 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();
}

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

1601491247
1601491247

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

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

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();

"Now, the secs1 and secs2 variables should contain different values, yet this is not the case... "

不,他们不...

QDateTime 不是时钟,只是一个 class 来表示任何给定时刻作为 DateTime 对象。