1

我需要解析 xml 格式的数据文件,其中节点的时间以以下格式的日期给出:

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

这将转化为:

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

我有给定格式的开始时间,我需要以微秒精度获取所有节点相对于开始时间的相对时间。

QTime::fromString() 只需要几毫秒。有没有比用我自己的时间戳编写我自己的解析器更容易的扩展?

我使用了具有自定义输入方面的 boost 库

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 回答