2017-10-18 3 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

あなたのコメントのためにInteressting、ありがとうTarod!明らかにQt 4.6のバグで、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); 
関連する問題