2017-10-18 77 views
3

我在版本4.6.2中使用Qt並嘗試使用UTC時間位移信息將自定義日期字符串轉換爲QDateTime對象。如何正確轉換日期時間字符串的utc時間位移?

QString format = "yyyy-MM-ddThh:mm:ss.zzz+hh:mm" 
QDateTime dateTime = QDateTime::fromString("2017-10-18T08:30:02.000+01:00", format); 
qDebug() << dateTime.toString(format); 

輸出是一個空字符串。

如果我省去格式字符串和日期字符串中的時間位移信息,我會按照預期得到日期字符串:2017-10-18T08:30:02.000。

根據Qt documentation of QDateTime::fromString,時間位移沒有明確的格式佔位符。

我也嘗試以下

QDateTime dateTime = QDateTime::fromString("2017-10-18T08:30:02.000+01:00", Qt::ISODate); // ISO 8601 
qDebug() << dateTime.toString(Qt::ISODate); 

但結果是2017-10-18T00:00:00。

那麼,我該如何正確轉換從日期時間字符串utc時間位移?

+5

有用? https://bugreports.qt.io/browse/QTBUG-11623 – Tarod

+0

交流,感謝您的評論塔羅德!很明顯,它是Qt 4.6中的一個Bug,並在Qt 4.7中修復。我意識到我在版本4.6.2中使用Qt。所以我會嘗試用更新的Qt版本解決我的問題。 – kbisang

+0

偉大的@kbisang!讓我們知道,如果你用不同的Qt版本得到你想要的東西。 – Tarod

回答

1

如果你需要留了Qt 4.6,你可以手動查找位移,並添加區別,如果存在:

QString strDate = "2017-10-18T08:30:02.000+01:00"; 
QStringList tokens = strDate.split('+'); 

QString format = "yyyy-MM-ddThh:mm:ss.zzz"; // format without displacement 
QDateTime dateTime = QDateTime::fromString(tokens[0], format); 

if (tokens.count() == 2) { // input has displacement 
    QString format = "hh:mm"; 
    int msecs = QTime::fromString(tokens[1], format).msecsSinceStartOfDay(); 
    dateTime = dateTime.addMSecs(msecs); 
} 

qDebug() << dateTime.toString(format); 
相關問題