我需要以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")));
但是,我希望仅在绝对必要时才包含其他库
答案 0 :(得分: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。