diff --git a/src/core/textfactory.cpp b/src/core/textfactory.cpp index 20daba24b..74f353734 100755 --- a/src/core/textfactory.cpp +++ b/src/core/textfactory.cpp @@ -18,20 +18,44 @@ QDateTime TextFactory::parseDateTime(const QString &date_time) { QString temp; QLocale locale(QLocale::C); QStringList date_patterns; + QStringList timezone_offset_patterns; QTime time_zone_offset; + //QRegExp timezone_rexp; bool positive_time_zone_offset = false; + date_patterns << "yyyy-MM-ddTHH:mm:ss" << "MMM dd yyyy hh:mm:ss" << + "MMM d yyyy hh:mm:ss" << "ddd, dd MMM yyyy HH:mm:ss" << + "dd MMM yyyy" << "yyyy-MM-dd HH:mm:ss.z" << "yyyy-MM-dd" << + "yyyy" << "yyyy-MM" << "yyyy-MM-dd" << "yyyy-MM-ddThh:mm" << + "yyyy-MM-ddThh:mm:ss"; + + timezone_offset_patterns << "[+-]\\d\\d:\\d\\d$" << // ±[hh]:[mm] + "[+-]\\d\\d\\d\\d$" << // ±[hh][mm] + "[+-]\\d\\d$"; // ±[hh] + + + /*if (date.size() > 7) { + int index = date.size() - 7; + + foreach (const QString &pattern, timezone_offset_patterns) { + timezone_rexp.setPattern(pattern); + + int index_start_timezone = timezone_rexp.indexIn(date, index); + + if (index_start_timezone != 1) { + + } + } + }*/ + + + // TODO: Patterny revidovat a nejdriv u predaneho stringu // hledat +,- znak, je li nalezen tak odriznout vse vpravo od nej // a to (mozna pomoci vice patternů) konvertovat na QTime (offset) // pote konvertovat zaklad date/time co je vlevo od -,+ // a na konec pricist/odecist offse. - date_patterns << "yyyy-MM-ddTHH:mm:ss" << "MMM dd yyyy hh:mm:ss" << - "MMM d yyyy hh:mm:ss" << "ddd, dd MMM yyyy HH:mm:ss" << - "dd MMM yyyy" << "yyyy-MM-dd HH:mm:ss.z" << "yyyy-MM-dd" << - "yyyy" << "yyyy-MM" << "yyyy-MM-dd" << "yyyy-MM-ddThh:mm" << - "yyyy-MM-ddThh:mm:ss"; // Check if last part of date is time zone offset, // represented as [+|-]hh:mm. @@ -74,10 +98,10 @@ QDateTime TextFactory::parseDateTime(const QString &date_time) { if (time_zone_offset.isValid()) { if (positive_time_zone_offset) { - return dt.addSecs(QTime(0, 0, 0, 0).secsTo(time_zone_offset)); + return dt.addSecs(- QTime(0, 0, 0, 0).secsTo(time_zone_offset)); } else { - return dt.addSecs(- QTime(0, 0, 0, 0).secsTo(time_zone_offset)); + return dt.addSecs(QTime(0, 0, 0, 0).secsTo(time_zone_offset)); } } else { diff --git a/src/core/textfactory.h b/src/core/textfactory.h index 416b5fa4e..ab395209e 100644 --- a/src/core/textfactory.h +++ b/src/core/textfactory.h @@ -13,7 +13,7 @@ class TextFactory { explicit TextFactory(); public: - static bool isCaseInsensitiveLessThan(const QString &lhs, const QString &rhs) { + static inline bool isCaseInsensitiveLessThan(const QString &lhs, const QString &rhs) { return lhs.toLower() < rhs.toLower(); }