如何获取当前时间戳?

56

我试图获取当前时间的时间戳,但没有成功。

这是我的代码:

QDateTime setTime = QDateTime::fromString (QString("1970-07-18T14:15:09"), Qt::ISODate);
QDateTime current = QDateTime::currentDateTime();
uint msecs = setTime.time().msecsTo(current.time());

return  QString::number(msecs);

输出为

Sunday, January 25th 1970, 03:17:35 (GMT)

时间戳是什么意思?请提供预期输出。 - chalup
3个回答

94
在Qt 4.7中,有一个静态函数QDateTime::currentMSecsSinceEpoch(),可以直接满足您的需求,没有任何中间步骤。因此,我建议在使用Qt 4.7或更新版本的项目中使用该函数。

11
请注意,这返回的是毫秒级别的时间间隔,而不是秒。因此它不是 Unix 时间! - drzymala
2
只需执行(QDateTime::currentMSecsSinceEpoch() / 1000),这将使其成为Unix时间 :P - Menno van Leeuwen
这个答案让我浪费了时间!因为这不是完全符合@martini提到的Unix时间。 - S.M.Mousavi
6
在Qt 5.8中(在编写时是全新版本),他们添加了currentSecsSinceEpoch函数:https://doc.qt.io/qt-5/qdatetime.html#currentSecsSinceEpoch - sunyata
适用于PyQt 5.10,我相信它使用的是Qt 5.10。 - Todor Todorov

39

我认为你正在寻找这个函数:

http://doc.qt.io/qt-5/qdatetime.html#toTime_t

uint QDateTime::toTime_t () const

返回从1970年01月01日00:00:00协调世界时(Qt::UTC)开始到当前日期时间所经过的秒数。

在不支持时区的系统上,此函数将表现为使用本地时间作为Qt::UTC。

另请参阅setTime_t()函数。


1
我做了这个:QDateTime current = QDateTime::currentDateTime(); uint timestame = current.toTime_t(); 但是在我测试结果时,它没有给我当前的日期,这里是测试链接:http://www.4webhelp.net/us/timestamp.php。 - user63898
2
刚刚尝试将QDateTime :: currentDateTime()。toTime_t()返回的字符串传递给此网站,并获得了正确的时间。也许您在此网站的表单中设置了错误的时区。 - VestniK
1
toTime_t()已被弃用,请使用toSecsSinceEpoch()代替(返回qint64而不是32位的uint,在2106年会溢出)。 - user

11
自Qt 5.8以来,我们现在有QDateTime::currentSecsSinceEpoch()直接提供秒数,也就是真正的Unix时间戳。因此,不再需要将结果除以1000以获取秒数。致谢:也发布为这个答案的评论。但是,我认为如果它是单独的答案,那么更容易找到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接