代码之家  ›  专栏  ›  技术社区  ›  andrewrk

将UTC格式的QDateTime转换为本地系统时间

  •  12
  • andrewrk  · 技术社区  · 14 年前

    我用这样的字符串构造一个QDateTime:

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

    date 是UTC格式的,因为这是它的存储方式。但是当我想向用户显示这个日期时,它应该在用户的本地时区。 date.toLocalTime()

    如何转换 日期 以系统的本地时间显示给用户?

    还有一些失败:

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

    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"
    
    2 回复  |  直到 14 年前
        1
  •  24
  •   andrewrk    14 年前

    QDateTime知道是UTC时间还是本地时间。例如:

    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 是UTC日期时间 date.setTimeSpec(Qt::UTC)

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

    输出:

    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,所以这是对的。

        2
  •  0
  •   Jérôme    14 年前

    正在使用 QDateTime::toString()

    也许你可以尝试使用不同的格式 QDateTime::toString(Qt::SystemLocaleLongDate) QDateTime::toString(Qt::SystemLocaleShortDate) .

    QLocale::dateTimeFormat() 获取本地格式 QString 然后使用此字符串作为 QDateTime::toString()