QT从具有微秒精度的日期解析时间戳

时间:2015-02-24 18:01:02

标签: c++ qt date timestamp-with-timezone

我需要以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")));

但是,我希望仅在绝对必要时才包含其他库

1 个答案:

答案 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。