refs #921, string utility functions

This commit is contained in:
Klaus Basan
2017-03-27 23:14:24 +02:00
committed by Mathew Sutcliffe
parent 5ce704c963
commit 8299552812
2 changed files with 73 additions and 0 deletions

View File

@@ -178,6 +178,62 @@ namespace BlackMisc
{
return removeChars(name.toUpper(), [](QChar c) { return !c.isUpper(); });
}
QDateTime parseMultipleDateTimeFormats(const QString &dateTimeString)
{
if (dateTimeString.isEmpty()) { return QDateTime(); }
if (isDigitsOnlyString(dateTimeString))
{
// 2017 0301 124421 321
if (dateTimeString.length() == 17)
{
return QDateTime::fromString(dateTimeString, "yyyyMMddHHmmsszzz");
}
if (dateTimeString.length() == 14)
{
return QDateTime::fromString(dateTimeString, "yyyyMMddHHmmss");
}
if (dateTimeString.length() == 12)
{
return QDateTime::fromString(dateTimeString, "yyyyMMddHHmm");
}
if (dateTimeString.length() == 8)
{
return QDateTime::fromString(dateTimeString, "yyyyMMdd");
}
return QDateTime();
}
// remove simple separators and check if digits only again
const QString simpleSeparatorsRemoved = removeChars(dateTimeString, [](QChar c)
{
return c == ' ' || c == ':' || c == '_' || c == '-';
});
if (isDigitsOnlyString(simpleSeparatorsRemoved))
{
return parseMultipleDateTimeFormats(simpleSeparatorsRemoved);
}
// stupid trial and error
QDateTime ts = QDateTime::fromString(dateTimeString, Qt::ISODateWithMs);
if (ts.isValid()) return ts;
ts = QDateTime::fromString(dateTimeString, Qt::ISODate);
if (ts.isValid()) return ts;
ts = QDateTime::fromString(dateTimeString, Qt::TextDate);
if (ts.isValid()) return ts;
ts = QDateTime::fromString(dateTimeString, Qt::DefaultLocaleLongDate);
if (ts.isValid()) return ts;
ts = QDateTime::fromString(dateTimeString, Qt::DefaultLocaleShortDate);
if (ts.isValid()) return ts;
// SystemLocaleShortDate,
// SystemLocaleLongDate,
return QDateTime();
}
}
//! \endcond

View File

@@ -17,6 +17,7 @@
#include <QByteArray>
#include <QDataStream>
#include <QDateTime>
#include <QDebug>
#include <QList>
#include <QMapIterator>
@@ -107,6 +108,18 @@ namespace BlackMisc
return s.trimmed();
}
//! String with digits only
inline bool isDigitsOnlyString(const QString &testString)
{
return !containsChar(testString, [](QChar c) { return !c.isDigit(); });
}
//! String only with digits
inline QString digitOnlyString(const QString &string)
{
return removeChars(string, [](QChar c) { return !c.isDigit(); });
}
//! Bool to on/off
BLACKMISC_EXPORT QString boolToOnOff(bool v, bool i18n = false);
@@ -143,6 +156,10 @@ namespace BlackMisc
//! Get a simplified upper case name for searching by removing all characters except A-Z
BLACKMISC_EXPORT QString simplifyNameForSearch(const QString &name);
//! Parse multiple date time formats
//! \remark potentially slow, so only to be used when format is unknown
BLACKMISC_EXPORT QDateTime parseMultipleDateTimeFormats(const QString &dateTimeString);
namespace Mixin
{
/*!