2010-10-27 7 views
8

için UTC bir QDateTime dönüştürme:Böyle bir dizeden bir QDateTime inşa yerel sistem saati

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

Bunun depolandığı yolu olduğu için date UTC olduğunu biliyoruz. Ancak bu tarihi kullanıcıya göstermek istediğimde, kullanıcının yerel saat diliminde olması gerekir. date.toLocalTime() ümit verici görünüyor, ancak aynı tarihi döndürüyor!

Kullanıcıya görüntülemek için sistemin yerel saatine date nasıl dönüştürebilirim?

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

Çıktı:

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" 

cevap

17

QDateTime, UTC mi yoksa yerel saat mi olduğunu bilir. Örneğin:

QDateTime utc = QDateTime::currentDateTimeUtc(); 
QDateTime local = QDateTime::currentDateTime(); 

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

Biz date.setTimeSpec(Qt::UTC) ile UTC tarih saat olduğunu date söylemek gerekir:

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

Çıktı:

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" 

o yüzden GMT-7 varım bu doğru.

0

sonuçları beklenen vermemek QDateTime::toString() kullanıyor

Burada bazı başarısızlıklar nelerdir?

Belki de QDateTime::toString(Qt::SystemLocaleLongDate) veya QDateTime::toString(Qt::SystemLocaleShortDate) ile farklı bir biçim kullanmayı deneyebilirsiniz.

Aksi takdirde, ben bir QString olarak yerel biçimini almak ve sonra QDateTime::toString() biçimi parametresi olarak bu dizeyi kullanmak QLocale::dateTimeFormat() kullanmayı deneyin, ama bunun bir şeyi değiştirecek sanmıyorum.

+0

bunu denedi, işe yaramadı. sorgulanacak düzenlemeleri gör – andrewrk