17 loadFormatsParseAcceptable();
18 loadFormatsParseIncomplete();
21bool FormatDateTime::ambiguityBetweenDateAndTime (
CoordUnitsDate coordUnitsDate,
23 const QString &
string)
const
27 bool ambiguous =
false;
34 QStringList fields =
string.trimmed().split(QRegularExpression (
"[/- :]"));
36 if (fields.count() == 1) {
47void FormatDateTime::dateTimeLookup (
const FormatsDate &formatsDateAll,
51 const QString &
string,
52 bool useQDateTimeElseQRegExp,
63 QStringList formatsDate = formatsDateAll [coordUnitsDate];
64 QStringList formatsTime = formatsTimeAll [coordUnitsTime];
67 QStringList::const_iterator itrDate, itrTime;
68 bool iterating =
true;
69 for (itrDate = formatsDate.begin(); itrDate != formatsDate.end() && iterating; itrDate++) {
71 QString formatDate = *itrDate;
73 for (itrTime = formatsTime.begin(); itrTime != formatsTime.end() && iterating; itrTime++) {
75 QString formatTime = *itrTime;
78 QString separator = (!formatDate.isEmpty() && !formatTime.isEmpty() ?
" " :
"");
80 QString formatDateTime = formatDate + separator + formatTime;
82 if (!formatDateTime.isEmpty()) {
85 if (useQDateTimeElseQRegExp) {
87 QDateTime dt = QDateTime::fromString (
string,
90 if (dt.isValid() && !ambiguityBetweenDateAndTime (coordUnitsDate,
98 value = toSecsSinceEpoch (dt.toLocalTime ());
102 <<
" string=" <<
string.toLatin1().data()
103 <<
" qDateTimeFormatMatched=" << formatDateTime.toLatin1().data()
104 <<
" value=" << value
105 <<
" stringQDateTime=" << dt.toString().toLatin1().data();
110 QRegularExpression reg (formatDateTime);
111 if (reg.match(
string).hasMatch()) {
117 <<
" string=" <<
string.toLatin1().data()
118 <<
" regExpMatched=" << formatDateTime.toLatin1().data();
132 <<
" value=" << value;
137 QString format = m_formatsDateFormat [coordUnitsDate] +
" " + m_formatsTimeFormat [coordUnitsTime];
138 format = format.trimmed();
143 dt = fromSecsSinceEpoch (
static_cast<qint64
> (value));
145 return dt.toLocalTime ().toString (format);
148QDateTime FormatDateTime::fromSecsSinceEpoch (qint64 secs)
const
150 return QDateTime::fromMSecsSinceEpoch (secs * 1000);
153void FormatDateTime::loadFormatsFormat()
169void FormatDateTime::loadFormatsParseAcceptable()
173 QStringList skip, dayMonth, dayMonthYear, monthDay, monthDayYear, yearMonth, yearMonthDay;
197 dayMonthYear <<
"d/M/yyyy"
241 monthDayYear <<
"M/d/yyyy"
265 yearMonth <<
"yyyy/M"
277 yearMonthDay <<
"yyyy/M/d"
297 m_formatsDateParseAcceptable [
COORD_UNITS_DATE_SKIP] = skip + monthDay + monthDayYear + yearMonthDay;
304 QStringList hour, hourMinute, hourMinuteSecond, hourMinutePm, hourMinuteSecondPm;
307 hourMinute <<
"hh:mm";
308 hourMinuteSecond <<
"hh:mm:ss";
309 hourMinutePm <<
"hh:mmA"
313 hourMinuteSecondPm <<
"hh:mm:ssA"
318 m_formatsTimeParseAcceptable [
COORD_UNITS_TIME_SKIP] = skip + hour + hourMinute + hourMinuteSecond + hourMinutePm + hourMinuteSecondPm;
319 m_formatsTimeParseAcceptable [
COORD_UNITS_TIME_HOUR_MINUTE] = skip + hour + hourMinute + hourMinutePm + hourMinuteSecond + hourMinuteSecondPm;
325void FormatDateTime::loadFormatsParseIncomplete()
329 QStringList skip, day, dayMonth, dayMonthYear, month, monthDay, monthDayYear, year, yearMonth, yearMonthDay;
340 dayMonth <<
"\\d{1,2}/\\d{1,2}"
341 <<
"\\d{1,2}/\\d{1,2} "
342 <<
"\\d{1,2}/\\d{1,2}/"
343 <<
"\\d{1,2}-\\d{1,2}-"
344 <<
"\\d{1,2}/[a-zA-Z]{1,12}/"
345 <<
"\\d{1,2}-[a-zA-Z]{1,12}-"
346 <<
"\\d{1,2} [a-zA-Z]{1,12} ";
347 dayMonthYear <<
"\\d{1,2}/\\d{1,2}/\\d{1,4}"
348 <<
"\\d{1,2}/\\d{1,2}/\\d{1,4} "
349 <<
"\\d{1,2}-\\d{1,2}-\\d{1,4}"
350 <<
"\\d{1,2}-\\d{1,2}-\\d{1,4} ";
354 <<
"[a-zA-Z]{1,12} ";
355 monthDay <<
"\\d{1,2}/\\d{1,2}"
356 <<
"\\d{1,2}/\\d{1,2} "
357 <<
"\\d{1,2}/\\d{1,2}/"
358 <<
"\\d{1,2} \\d{1,2}"
359 <<
"\\d{1,2} \\d{1,2} "
360 <<
"\\d{1,2}-\\d{1,2}-"
363 <<
"[a-zA-Z]{1,12} \\d{1,2}"
364 <<
"[a-zA-Z]{1,12} \\d{1,2} ";
365 monthDayYear <<
"\\d{1,2}/\\d{1,2}/\\d{1,4}"
366 <<
"\\d{1,2}/\\d{1,2}/\\d{1,4} "
367 <<
"\\d{1,2}-\\d{1,2}-\\d{1,4}"
368 <<
"\\d{1,2}-\\d{1,2}-\\d{1,4} "
369 <<
"\\d{1,2} \\d{1,2} \\d{1,4}"
370 <<
"\\d{1,2} \\d{1,2} \\d{1,4} ";
375 yearMonth <<
"\\d{4}/\\d{1,2}"
376 <<
"\\d{4}/\\d{1,2} "
377 <<
"\\d{4}/\\d{1,2}/"
379 <<
"\\d{4}-\\d{1,2} "
380 <<
"\\d{4}-\\d{1,2}-"
382 <<
"\\d{4} \\d{1,2} "
383 <<
"\\d{4}/[a-zA-Z]{1,12}"
384 <<
"\\d{4}/[a-zA-Z]{1,12} "
385 <<
"\\d{4}/[a-zA-Z]{1,12}/"
386 <<
"\\d{4}-[a-zA-Z]{1,12}"
387 <<
"\\d{4}-[a-zA-Z]{1,12} "
388 <<
"\\d{4}-[a-zA-Z]{1,12}-"
389 <<
"\\d{4} [a-zA-Z]{1,12}"
390 <<
"\\d{4} [a-zA-Z]{1,12} ";
391 yearMonthDay <<
"\\d{4}/\\d{1,2}/\\d{1,2}"
392 <<
"\\d{4}/\\d{1,2}/\\d{1,2} "
393 <<
"\\d{4}/\\d{1,2}-\\d{1,2}"
394 <<
"\\d{4}/\\d{1,2}-\\d{1,2} "
395 <<
"\\d{4} \\d{1,2} \\d{1,2}"
396 <<
"\\d{4}/[a-zA-Z]{1,12}/\\d{1,2}"
397 <<
"\\d{4}/[a-zA-Z]{1,12}/\\d{1,2} "
398 <<
"\\d{4}-[a-zA-Z]{1,12}-\\d{1,2}"
399 <<
"\\d{4}-[a-zA-Z]{1,12}-\\d{1,2} ";
403 m_formatsDateParseIncomplete [
COORD_UNITS_DATE_SKIP] = skip + month + monthDay + monthDayYear + year + yearMonth + yearMonthDay;
410 QStringList hour, hourMinute, hourMinuteAmPm, hourMinuteSecond, hourMinuteSecondAmPm;
414 hourMinute <<
"\\d{1,2}:\\d{1,2}"
415 <<
"\\d{1,2}:\\d{1,2}:"
416 <<
"\\d{1,2}:\\d{1,2} ";
417 hourMinuteAmPm <<
"\\d{1,2}:\\d{1,2} [aApP]";
418 hourMinuteSecond <<
"\\d{1,2}:\\d{1,2}:\\d{1,2}"
419 <<
"\\d{1,2}:\\d{1,2}:\\d{1,2} ";
420 hourMinuteSecondAmPm <<
"\\d{1,2}:\\d{1,2}:\\d{1,2} [aApP]";
425 hourMinute + hourMinuteAmPm +
426 hourMinuteSecond + hourMinuteSecondAmPm;
429 hourMinute + hourMinuteAmPm +
430 hourMinuteSecond + hourMinuteSecondAmPm;
433 hourMinute + hourMinuteAmPm +
434 hourMinuteSecond + hourMinuteSecondAmPm;
441 const QString &stringUntrimmed,
447 <<
" string=" << stringUntrimmed.toLatin1().data();
449 const bool USE_QREGEXP =
true, DO_NOT_USE_QREGEXP =
false;
451 const QString
string = stringUntrimmed.trimmed();
453 QValidator::State state;
454 if (
string.isEmpty()) {
456 state = QValidator::Intermediate;
460 state = QValidator::Invalid;
463 bool success =
false;
464 dateTimeLookup (m_formatsDateParseAcceptable,
465 m_formatsTimeParseAcceptable,
474 state = QValidator::Acceptable;
479 dateTimeLookup (m_formatsDateParseIncomplete,
480 m_formatsTimeParseIncomplete,
489 state = QValidator::Intermediate;
498qint64 FormatDateTime::toSecsSinceEpoch (
const QDateTime &dt)
const
500 return dt.toMSecsSinceEpoch () /
static_cast<qint64
> (1000);
QString coordUnitsDateToString(CoordUnitsDate coordUnits)
@ COORD_UNITS_DATE_DAY_MONTH_YEAR
@ COORD_UNITS_DATE_YEAR_MONTH_DAY
@ COORD_UNITS_DATE_MONTH_DAY_YEAR
QString coordUnitsTimeToString(CoordUnitsTime coordUnits)
@ COORD_UNITS_TIME_HOUR_MINUTE_SECOND
@ COORD_UNITS_TIME_HOUR_MINUTE
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT.
log4cpp::Category * mainCat
#define LOG4CPP_INFO_S(logger)