首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将QDateTime转换为本地系统时间

将QDateTime转换为本地系统时间
EN

Stack Overflow用户
提问于 2010-10-27 14:26:28
回答 2查看 22.2K关注 0票数 16

我用如下所示的字符串构造QDateTime:

代码语言:javascript
复制
QDateTime date = QDateTime::fromString("2010-10-25T10:28:58.570Z", "yyyy-MM-ddTHH:mm:ss.zzzZ");

我知道date使用UTC,因为这是它的存储方式。但是当我想要向用户显示这个日期时,它应该在用户的本地时区。date.toLocalTime()看起来很有希望,但它返回的日期完全相同!

如何将date转换为系统的本地时间以显示给用户?

以下是更多的失败:

代码语言:javascript
复制
#include <QtCore/QCoreApplication>
#include <QtCore/QDateTime>
#include <QtCore/QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QDateTime date = QDateTime::fromString("2010-10-25T10:28:58.570Z", "yyyy-MM-ddTHH:mm:ss.zzzZ");
    QDateTime local = date.toLocalTime();

    qDebug() << "utc: " << date;
    qDebug() << "local: " << local.toString();
    qDebug() << "hax: " << local.toString(Qt::SystemLocaleLongDate);

    return a.exec();
}

输出:

代码语言:javascript
复制
utc:  QDateTime("Mon Oct 25 10:28:58 2010")
local:  "Mon Oct 25 10:28:58 2010"
hax:  "Monday, October 25, 2010 10:28:58 AM"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-27 15:18:47

QDateTime知道现在是协调世界时还是本地时间。例如:

代码语言:javascript
复制
QDateTime utc = QDateTime::currentDateTimeUtc();
QDateTime local = QDateTime::currentDateTime();

local.secsTo(utc) // zero; these dates are the same even though I am in GMT-7

我们需要告诉date,这是date.setTimeSpec(Qt::UTC)的协调世界时日期时间

代码语言:javascript
复制
#include <QtCore/QCoreApplication>
#include <QtCore/QDateTime>
#include <QtCore/QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QDateTime date = QDateTime::fromString("2010-10-25T10:28:58.570Z", "yyyy-MM-ddTHH:mm:ss.zzzZ");
    date.setTimeSpec(Qt::UTC);
    QDateTime local = date.toLocalTime();

    qDebug() << "utc: " << date;
    qDebug() << "local: " << local.toString();
    qDebug() << "hax: " << local.toString(Qt::SystemLocaleLongDate);

    return a.exec();
}

输出:

代码语言:javascript
复制
utc:  QDateTime("Mon Oct 25 10:28:58 2010") 
local:  "Mon Oct 25 03:28:58 2010" 
hax:  "Monday, October 25, 2010 3:28:58 AM"

我在GMT-7,所以这是对的。

票数 31
EN

Stack Overflow用户

发布于 2010-10-27 14:31:47

使用QDateTime::toString()不会给你带来预期的结果吗?

也许您可以尝试在QDateTime::toString(Qt::SystemLocaleLongDate)QDateTime::toString(Qt::SystemLocaleShortDate)中使用不同的格式。

否则,我会尝试使用QLocale::dateTimeFormat()将本地格式作为QString,然后使用此字符串作为QDateTime::toString()的格式参数,但我认为这不会改变任何事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4030511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档