20 loadFormatsParseAcceptable();
21 loadFormatsParseIncomplete();
24 bool FormatDateTime::ambiguityBetweenDateAndTime (
CoordUnitsDate coordUnitsDate,
26 const QString &
string)
const 30 bool ambiguous =
false;
37 QStringList fields =
string.trimmed().split(QRegExp (
"[/- :]"));
39 if (fields.count() == 1) {
50 void FormatDateTime::dateTimeLookup (
const FormatsDate &formatsDateAll,
54 const QString &
string,
55 bool useQDateTimeElseQRegExp,
66 QStringList formatsDate = formatsDateAll [coordUnitsDate];
67 QStringList formatsTime = formatsTimeAll [coordUnitsTime];
70 QStringList::const_iterator itrDate, itrTime;
71 bool iterating =
true;
72 for (itrDate = formatsDate.begin(); itrDate != formatsDate.end() && iterating; itrDate++) {
74 QString formatDate = *itrDate;
76 for (itrTime = formatsTime.begin(); itrTime != formatsTime.end() && iterating; itrTime++) {
78 QString formatTime = *itrTime;
81 QString separator = (!formatDate.isEmpty() && !formatTime.isEmpty() ?
" " :
"");
83 QString formatDateTime = formatDate + separator + formatTime;
85 if (!formatDateTime.isEmpty()) {
88 if (useQDateTimeElseQRegExp) {
90 QDateTime dt = QDateTime::fromString (
string,
93 if (dt.isValid() && !ambiguityBetweenDateAndTime (coordUnitsDate,
102 <<
" string=" <<
string.toLatin1().data()
103 <<
" qDateTimeFormatMatched=" << formatDateTime.toLatin1().data()
104 <<
" value=" << value
105 <<
" stringQDateTime=" << dt.toString().toLatin1().data();
110 QRegExp reg (formatDateTime);
111 if (reg.exactMatch(
string)) {
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();
142 QDateTime dt = QDateTime::fromTime_t (
unsigned (qFloor (value)));
147 void FormatDateTime::loadFormatsFormat()
163 void FormatDateTime::loadFormatsParseAcceptable()
167 QStringList skip, dayMonth, dayMonthYear, monthDay, monthDayYear, yearMonth, yearMonthDay;
191 dayMonthYear <<
"d/M/yyyy" 235 monthDayYear <<
"M/d/yyyy" 259 yearMonth <<
"yyyy/M" 271 yearMonthDay <<
"yyyy/M/d" 291 m_formatsDateParseAcceptable [
COORD_UNITS_DATE_SKIP] = skip + monthDay + monthDayYear + yearMonthDay;
298 QStringList hour, hourMinute, hourMinuteSecond, hourMinutePm, hourMinuteSecondPm;
301 hourMinute <<
"hh:mm";
302 hourMinuteSecond <<
"hh:mm:ss";
303 hourMinutePm <<
"hh:mmA" 307 hourMinuteSecondPm <<
"hh:mm:ssA" 312 m_formatsTimeParseAcceptable [
COORD_UNITS_TIME_SKIP] = skip + hour + hourMinute + hourMinuteSecond + hourMinutePm + hourMinuteSecondPm;
313 m_formatsTimeParseAcceptable [
COORD_UNITS_TIME_HOUR_MINUTE] = skip + hour + hourMinute + hourMinutePm + hourMinuteSecond + hourMinuteSecondPm;
319 void FormatDateTime::loadFormatsParseIncomplete()
323 QStringList skip, day, dayMonth, month, monthDay, monthDayYear, year, yearMonth, yearMonthDay;
334 dayMonth <<
"\\d{1,2}/\\d{1,2}" 335 <<
"\\d{1,2}/\\d{1,2} " 336 <<
"\\d{1,2}/\\d{1,2}/" 337 <<
"\\d{1,2}-\\d{1,2}-" 338 <<
"\\d{1,2}/[a-zA-Z]{1,12}/" 339 <<
"\\d{1,2}-[a-zA-Z]{1,12}-" 340 <<
"\\d{1,2} [a-zA-Z]{1,12} ";
344 <<
"[a-zA-Z]{1,12} ";
345 monthDay <<
"\\d{1,2}/\\d{1,2}" 346 <<
"\\d{1,2}/\\d{1,2} " 347 <<
"\\d{1,2}/\\d{1,2}/" 348 <<
"\\d{1,2} \\d{1,2}" 349 <<
"\\d{1,2} \\d{1,2} " 350 <<
"\\d{1,2}-\\d{1,2}-" 353 <<
"[a-zA-Z]{1,12} \\d{1,2}" 354 <<
"[a-zA-Z]{1,12} \\d{1,2} ";
355 monthDayYear <<
"\\d{1,2}/\\d{1,2}/\\d{1,4}" 356 <<
"\\d{1,2}/\\d{1,2}/\\d{1,4} " 357 <<
"\\d{1,2}-\\d{1,2}-\\d{1,4}" 358 <<
"\\d{1,2}-\\d{1,2}-\\d{1,4} " 359 <<
"\\d{1,2} \\d{1,2} \\d{1,4}" 360 <<
"\\d{1,2} \\d{1,2} \\d{1,4} ";
365 yearMonth <<
"\\d{4}/\\d{1,2}" 366 <<
"\\d{4}/\\d{1,2} " 367 <<
"\\d{4}/\\d{1,2}/" 369 <<
"\\d{4}-\\d{1,2} " 370 <<
"\\d{4}-\\d{1,2}-" 372 <<
"\\d{4} \\d{1,2} " 373 <<
"\\d{4}/[a-zA-Z]{1,12}" 374 <<
"\\d{4}/[a-zA-Z]{1,12} " 375 <<
"\\d{4}/[a-zA-Z]{1,12}/" 376 <<
"\\d{4}-[a-zA-Z]{1,12}" 377 <<
"\\d{4}-[a-zA-Z]{1,12} " 378 <<
"\\d{4}-[a-zA-Z]{1,12}-" 379 <<
"\\d{4} [a-zA-Z]{1,12}" 380 <<
"\\d{4} [a-zA-Z]{1,12} ";
381 yearMonthDay <<
"\\d{4}/\\d{1,2}/\\d{1,2}" 382 <<
"\\d{4}/\\d{1,2}-\\d{1,2}" 383 <<
"\\d{4} \\d{1,2} \\d{1,2}" 384 <<
"\\d{4}/[a-zA-Z]{1,12}/\\d{1,2}" 385 <<
"\\d{4}-[a-zA-Z]{1,12}-\\d{1,2}";
389 m_formatsDateParseIncomplete [
COORD_UNITS_DATE_SKIP] = skip + month + monthDay + monthDayYear + year + yearMonth + yearMonthDay;
396 QStringList hour, hourMinute, hourMinuteAmPm, hourMinuteSecond, hourMinuteSecondAmPm;
400 hourMinute <<
"\\d{1,2}:\\d{1,2}" 401 <<
"\\d{1,2}:\\d{1,2}:" 402 <<
"\\d{1,2}:\\d{1,2} ";
403 hourMinuteAmPm <<
"\\d{1,2}:\\d{1,2} [aApP]";
404 hourMinuteSecond <<
"\\d{1,2}:\\d{1,2}:\\d{1,2}" 405 <<
"\\d{1,2}:\\d{1,2}:\\d{1,2} ";
406 hourMinuteSecondAmPm <<
"\\d{1,2}:\\d{1,2}:\\d{1,2} [aApP]";
411 hourMinute + hourMinuteAmPm +
412 hourMinuteSecond + hourMinuteSecondAmPm;
415 hourMinute + hourMinuteAmPm +
416 hourMinuteSecond + hourMinuteSecondAmPm;
419 hourMinute + hourMinuteAmPm +
420 hourMinuteSecond + hourMinuteSecondAmPm;
427 const QString &stringUntrimmed,
433 <<
" string=" << stringUntrimmed.toLatin1().data();
435 const bool USE_QREGEXP =
true, DO_NOT_USE_QREGEXP =
false;
437 const QString
string = stringUntrimmed.trimmed();
439 QValidator::State state;
440 if (
string.isEmpty()) {
442 state = QValidator::Intermediate;
446 state = QValidator::Invalid;
449 bool success =
false;
450 dateTimeLookup (m_formatsDateParseAcceptable,
451 m_formatsTimeParseAcceptable,
460 state = QValidator::Acceptable;
465 dateTimeLookup (m_formatsDateParseIncomplete,
466 m_formatsTimeParseIncomplete,
475 state = QValidator::Intermediate;
#define LOG4CPP_INFO_S(logger)
QString coordUnitsDateToString(CoordUnitsDate coordUnits)
log4cpp::Category * mainCat
QString coordUnitsTimeToString(CoordUnitsTime coordUnits)
#define ENGAUGE_ASSERT(cond)
Drop in replacement for Q_ASSERT if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS) define ENGAUGE...