1

データ ファイルを xml 形式で解析する必要があります。ノードの時刻は、次の形式の日付として指定されます。

2014-08-26T21:51:16.779947+02:00

これは次のように変換されます。

yyyy-mm-ddTHH:MM:ss.zzzzzz+UTC

指定された形式で開始時間があり、マイクロ秒の精度で開始時間に対するすべてのノードの相対時間を取得する必要があります。

QTime::fromString() はミリ秒しかかかりません。自分のタイムスタンプで自分のパーサーを書くよりも簡単な拡張機能はありますか?

自分で定義した入力ファセットを持つブースト ライブラリを使用しました

new boost::posix_time::time_input_facet("%Y-%m-%dT%H:%M:%s%ZP")));

ただし、絶対に必要な場合にのみ追加のライブラリを含めることをお勧めします

4

1 に答える 1

0

UTC についてはどうすればよいかわかりませんが、日付と時刻については、文字列を分割して日付と時刻を取得した後、次のようなことができます。

QString time("21:51:16.779");
QString date("2014-08-26");
QDate date = QDate::fromString(date, "yyyy-MM-dd");
QTime time = QTime::fromString(time, "h:m:s.zzz");

実際、ミリ秒だけを取得しないように、日付と時刻の fromString をフォーマットできます。

ただし、本当にマイクロ秒を取得したい場合は、QTime を継承するクラスを作成してからvoid QTime::fromString(QString, QString);メソッドをオーバーロードする必要があります。次に、このメソッドでは、そのようなことを行います。

void MyTime::fromString(QString& str, QString format) {
 QRegExp rx("([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})\.([0-9]{6})");
rx.indexIn(str);
_year = rx.cap(1);
_month = rx.cap(5);
_day = rx.cap(7);
_hour = rx.cap(9);
_min = rx.cap(11);
_sec = rx.cap(13);
_msec = rx.cap(15);
}

これで、ミリ秒でミリ秒とマイクロ秒を取得する必要があります。正規表現は完全なものではないため、変更する必要がありますが、機能するはずです。UTC については、QTimeZone についてを参照してください。

于 2015-02-25T01:57:31.557 に答える