2010-10-27 368 views
8

我從這樣的字符串構建一個QDateTime:在UTC轉換一個QDateTime到本地系統時間

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

我知道date是UTC,因爲這是它的存儲方式。但是當我想將這個日期顯示給用戶時,它應該在用戶的本地時區中。 date.toLocalTime()看起來很有前途,但它會返回完全相同的日期!

如何將date轉換爲系統的本地時間以顯示給用戶?

下面是一些故障:

#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" 

回答

17

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,所以這是對的。

0

是使用QDateTime::toString()不給你預期的結果?

也許你可以嘗試使用與QDateTime::toString(Qt::SystemLocaleLongDate)QDateTime::toString(Qt::SystemLocaleShortDate)不同的格式。

否則,我會嘗試使用QLocale::dateTimeFormat()獲取本地格式作爲QString,然後使用此字符串作爲格式參數QDateTime::toString(),但我不認爲它會改變任何內容。

+0

試了一下,沒有工作。請參閱編輯以提問 – andrewrk 2010-10-27 07:01:14