From 6e669b50862b2b2eab8c9d1256fb7641ae5b632e Mon Sep 17 00:00:00 2001 From: Jeremy Lainé Date: Wed, 24 Feb 2010 09:49:17 +0000 Subject: add support for XEP-0082: XMPP Date and Time Profiles --- source/QXmppUtils.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'source/QXmppUtils.cpp') diff --git a/source/QXmppUtils.cpp b/source/QXmppUtils.cpp index 8bb5b0ab..9219a74e 100644 --- a/source/QXmppUtils.cpp +++ b/source/QXmppUtils.cpp @@ -33,6 +33,41 @@ #include #include +QDateTime datetimeFromString(const QString &str) +{ + QRegExp tzRe("(Z|([+-])([0-9]{2}):([0-9]{2}))"); + int tzPos = tzRe.indexIn(str, 19); + if (str.size() < 20 || tzPos < 0) + return QDateTime(); + + // process date and time + QDateTime dt = QDateTime::fromString(str.left(19), "yyyy-MM-ddThh:mm:ss"); + dt.setTimeSpec(Qt::UTC); + + // process milliseconds + if (tzPos > 20 && str.at(19) == '.') + { + QString millis = (str.mid(20, tzPos - 20) + "000").left(3); + dt = dt.addMSecs(millis.toInt()); + } + + // process time zone + if (tzRe.cap(1) != "Z") + { + int offset = tzRe.cap(3).toInt() * 3600 + tzRe.cap(4).toInt() * 60; + if (tzRe.cap(2) == "+") + dt = dt.addSecs(-offset); + else + dt = dt.addSecs(offset); + } + return dt; +} + +QString datetimeToString(const QDateTime &dt) +{ + return dt.toUTC().toString("yyyy-MM-ddThh:mm:ss.zzzZ"); +} + QString jidToResource(const QString& jid) { const int pos = jid.indexOf(QChar('/')); -- cgit v1.2.3