17 loadFormatsParseAcceptable();
18 loadFormatsParseIncomplete();
21bool FormatDateTime::ambiguityBetweenDateAndTime (
CoordUnitsDate coordUnitsDate,
23 const QString &
string)
const
27 bool ambiguous =
false;
34 QStringList fields =
string.trimmed().split(QRegExp (
"[/- :]"));
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 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();
144 dt = fromSecsSinceEpoch ((
unsigned long int) (value));
146 dt = fromSecsSinceEpoch ((
long int) (value));
149 return dt.toLocalTime ().toString (format);
152QDateTime FormatDateTime::fromSecsSinceEpoch (qint64 secs)
const
154 return QDateTime::fromMSecsSinceEpoch (secs * 1000);
157void FormatDateTime::loadFormatsFormat()
173void FormatDateTime::loadFormatsParseAcceptable()
177 QStringList skip, dayMonth, dayMonthYear, monthDay, monthDayYear, yearMonth, yearMonthDay;
201 dayMonthYear <<
"d/M/yyyy"
245 monthDayYear <<
"M/d/yyyy"
269 yearMonth <<
"yyyy/M"
281 yearMonthDay <<
"yyyy/M/d"
301 m_formatsDateParseAcceptable [
COORD_UNITS_DATE_SKIP] = skip + monthDay + monthDayYear + yearMonthDay;
308 QStringList hour, hourMinute, hourMinuteSecond, hourMinutePm, hourMinuteSecondPm;
311 hourMinute <<
"hh:mm";
312 hourMinuteSecond <<
"hh:mm:ss";
313 hourMinutePm <<
"hh:mmA"
317 hourMinuteSecondPm <<
"hh:mm:ssA"
322 m_formatsTimeParseAcceptable [
COORD_UNITS_TIME_SKIP] = skip + hour + hourMinute + hourMinuteSecond + hourMinutePm + hourMinuteSecondPm;
323 m_formatsTimeParseAcceptable [
COORD_UNITS_TIME_HOUR_MINUTE] = skip + hour + hourMinute + hourMinutePm + hourMinuteSecond + hourMinuteSecondPm;
329void FormatDateTime::loadFormatsParseIncomplete()
333 QStringList skip, day, dayMonth, dayMonthYear, month, monthDay, monthDayYear, year, yearMonth, yearMonthDay;
344 dayMonth <<
"\\d{1,2}/\\d{1,2}"
345 <<
"\\d{1,2}/\\d{1,2} "
346 <<
"\\d{1,2}/\\d{1,2}/"
347 <<
"\\d{1,2}-\\d{1,2}-"
348 <<
"\\d{1,2}/[a-zA-Z]{1,12}/"
349 <<
"\\d{1,2}-[a-zA-Z]{1,12}-"
350 <<
"\\d{1,2} [a-zA-Z]{1,12} ";
351 dayMonthYear <<
"\\d{1,2}/\\d{1,2}/\\d{1,4}"
352 <<
"\\d{1,2}/\\d{1,2}/\\d{1,4} "
353 <<
"\\d{1,2}-\\d{1,2}-\\d{1,4}"
354 <<
"\\d{1,2}-\\d{1,2}-\\d{1,4} ";
358 <<
"[a-zA-Z]{1,12} ";
359 monthDay <<
"\\d{1,2}/\\d{1,2}"
360 <<
"\\d{1,2}/\\d{1,2} "
361 <<
"\\d{1,2}/\\d{1,2}/"
362 <<
"\\d{1,2} \\d{1,2}"
363 <<
"\\d{1,2} \\d{1,2} "
364 <<
"\\d{1,2}-\\d{1,2}-"
367 <<
"[a-zA-Z]{1,12} \\d{1,2}"
368 <<
"[a-zA-Z]{1,12} \\d{1,2} ";
369 monthDayYear <<
"\\d{1,2}/\\d{1,2}/\\d{1,4}"
370 <<
"\\d{1,2}/\\d{1,2}/\\d{1,4} "
371 <<
"\\d{1,2}-\\d{1,2}-\\d{1,4}"
372 <<
"\\d{1,2}-\\d{1,2}-\\d{1,4} "
373 <<
"\\d{1,2} \\d{1,2} \\d{1,4}"
374 <<
"\\d{1,2} \\d{1,2} \\d{1,4} ";
379 yearMonth <<
"\\d{4}/\\d{1,2}"
380 <<
"\\d{4}/\\d{1,2} "
381 <<
"\\d{4}/\\d{1,2}/"
383 <<
"\\d{4}-\\d{1,2} "
384 <<
"\\d{4}-\\d{1,2}-"
386 <<
"\\d{4} \\d{1,2} "
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 <<
"\\d{4}-[a-zA-Z]{1,12} "
392 <<
"\\d{4}-[a-zA-Z]{1,12}-"
393 <<
"\\d{4} [a-zA-Z]{1,12}"
394 <<
"\\d{4} [a-zA-Z]{1,12} ";
395 yearMonthDay <<
"\\d{4}/\\d{1,2}/\\d{1,2}"
396 <<
"\\d{4}/\\d{1,2}/\\d{1,2} "
397 <<
"\\d{4}/\\d{1,2}-\\d{1,2}"
398 <<
"\\d{4}/\\d{1,2}-\\d{1,2} "
399 <<
"\\d{4} \\d{1,2} \\d{1,2}"
400 <<
"\\d{4}/[a-zA-Z]{1,12}/\\d{1,2}"
401 <<
"\\d{4}/[a-zA-Z]{1,12}/\\d{1,2} "
402 <<
"\\d{4}-[a-zA-Z]{1,12}-\\d{1,2}"
403 <<
"\\d{4}-[a-zA-Z]{1,12}-\\d{1,2} ";
407 m_formatsDateParseIncomplete [
COORD_UNITS_DATE_SKIP] = skip + month + monthDay + monthDayYear + year + yearMonth + yearMonthDay;
414 QStringList hour, hourMinute, hourMinuteAmPm, hourMinuteSecond, hourMinuteSecondAmPm;
418 hourMinute <<
"\\d{1,2}:\\d{1,2}"
419 <<
"\\d{1,2}:\\d{1,2}:"
420 <<
"\\d{1,2}:\\d{1,2} ";
421 hourMinuteAmPm <<
"\\d{1,2}:\\d{1,2} [aApP]";
422 hourMinuteSecond <<
"\\d{1,2}:\\d{1,2}:\\d{1,2}"
423 <<
"\\d{1,2}:\\d{1,2}:\\d{1,2} ";
424 hourMinuteSecondAmPm <<
"\\d{1,2}:\\d{1,2}:\\d{1,2} [aApP]";
429 hourMinute + hourMinuteAmPm +
430 hourMinuteSecond + hourMinuteSecondAmPm;
433 hourMinute + hourMinuteAmPm +
434 hourMinuteSecond + hourMinuteSecondAmPm;
437 hourMinute + hourMinuteAmPm +
438 hourMinuteSecond + hourMinuteSecondAmPm;
445 const QString &stringUntrimmed,
451 <<
" string=" << stringUntrimmed.toLatin1().data();
453 const bool USE_QREGEXP =
true, DO_NOT_USE_QREGEXP =
false;
455 const QString
string = stringUntrimmed.trimmed();
457 QValidator::State state;
458 if (
string.isEmpty()) {
460 state = QValidator::Intermediate;
464 state = QValidator::Invalid;
467 bool success =
false;
468 dateTimeLookup (m_formatsDateParseAcceptable,
469 m_formatsTimeParseAcceptable,
478 state = QValidator::Acceptable;
483 dateTimeLookup (m_formatsDateParseIncomplete,
484 m_formatsTimeParseIncomplete,
493 state = QValidator::Intermediate;
502qint64 FormatDateTime::toSecsSinceEpoch (
const QDateTime &dt)
const
504 return dt.toMSecsSinceEpoch () / 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)