2017-10-18 2 views
3

J'utilise Qt avec la version 4.6.2 et j'essaie de transformer une chaîne de date personnalisée avec des informations de déplacement temporel UTC en un objet QDateTime.Comment transformer correctement le déplacement de temps utc d'une chaîne de date-heure?

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); 

La sortie est une chaîne vide.

Si j'omets les informations de déplacement temporel dans la chaîne de format et dans la chaîne de date, j'obtiens la chaîne de date comme prévu: 2017-10-18T08: 30: 02.000.

Selon le Qt documentation of QDateTime::fromString, il n'existe aucun espace réservé de format explicite pour le décalage de temps.

J'essaie également les éléments suivants

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

mais le résultat est 2017-10-18T00: 00: 00. Donc, comment est-ce que je transforme correctement le déplacement de temps utc d'une chaîne de date et d'heure?

+5

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

+0

Intéressant, merci pour votre commentaire Tarod! Evidente c'est un Bug dans Qt 4.6 et est fixé dans Qt 4.7. J'ai reconnu que j'utilise Qt avec la version 4.6.2. Je vais donc essayer de résoudre mon problème ci-dessus avec la version plus récente de Qt. – kbisang

+0

Super @kbisang! Faites-nous savoir si vous obtenez ce que vous voulez avec une version différente de Qt. – Tarod

Répondre

1

Dans le cas où vous auriez besoin de rester avec Qt 4.6 vous pouvez rechercher manuellement pour le déplacement et ajouter la différence si elle est présente:

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);