All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions | Protected Member Functions
QGpCoreTools::DateTimeFromString Class Reference
Inheritance diagram for QGpCoreTools::DateTimeFromString:
QGpCoreTools::DateTimeParser

List of all members.

Public Member Functions

 DateTimeFromString (const QString &text)
DateTimeData value (bool &ok) const

Protected Member Functions

virtual bool ap_parsed ()
virtual bool AP_parsed ()
virtual bool d_parsed ()
virtual bool dd_parsed ()
virtual bool ddd_parsed ()
virtual bool dddd_parsed ()
virtual bool h_parsed ()
virtual bool H_parsed ()
virtual bool hh_parsed ()
virtual bool HH_parsed ()
virtual bool M_parsed ()
virtual bool m_parsed ()
virtual bool MM_parsed ()
virtual bool mm_parsed ()
virtual bool MMM_parsed ()
virtual bool MMMM_parsed ()
virtual bool other_parsed (const QChar &c)
virtual bool quote_parsed (const StringSection &text)
virtual bool s_parsed ()
virtual bool ss_parsed ()
virtual bool ssz_parsed ()
virtual bool sz_parsed ()
virtual bool yy_parsed ()
virtual bool yyyy_parsed ()
virtual bool z_parsed ()
virtual bool zzz_parsed ()

Constructor & Destructor Documentation

References QGpCoreTools::StringSection::set().

{
  _text=text;
  _current.set(_text);
  _year=1970;
  _month=1;
  _day=1;
  _hour=0;
  _minute=0;
  _second=0;
  _fraction=0.0;
  _ampm=UndefinedAMPM;
}

Member Function Documentation

bool QGpCoreTools::DateTimeFromString::ap_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::StringSection::beginWith(), QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current.beginWith("am")) {
    if(_ampm!=IgnoreAMPM) {
      _ampm=AM;
    }
    _current+=2;
    return true;
  } else if(_current.beginWith("pm")) {
    if(_ampm!=IgnoreAMPM) {
      _ampm=PM;
    }
    _current+=2;
    return true;
  }
  App::stream() << tr("expected am or pm: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::AP_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::StringSection::beginWith(), QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current.beginWith("AM")) {
    if(_ampm!=IgnoreAMPM) {
      _ampm=AM;
    }
    _current+=2;
  } else if(_current.beginWith("PM")) {
    if(_ampm!=IgnoreAMPM) {
      _ampm=PM;
    }
    _current+=2;
  }
  App::stream() << tr("expected AM or PM: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::d_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() || _current[0].isSpace()) {
    if(_current[1].isDigit()) {
      _day=_current.left(2).toInt();
      if(_day>=1 && _day<=31) {
        _current+=2;
        return true;
      }
    } else {
      _day=_current.left(1).toInt();
      if(_day>=1) {
        _current+=1;
        return true;
      }
    }
  }
  App::stream() << tr("expected a number between 1 and 31: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::dd_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() && _current[1].isDigit()) {
    _day=_current.left(2).toInt();
    if(_day>=1 && _day<=31) {
      _current+=2;
      return true;
    }
  }
  App::stream() << tr("expected a number between 01 and 31: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::ddd_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::StringSection::beginWith(), QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  for(int i=1;i<=7; i++) {
    QString n=QDate::shortDayName(i);
    if(_current.beginWith(n)) {
      _dayShort=n;
      _current+=n.count();
      return true;
    }
  }
  App::stream() << tr("expected a valid short day name: '%1'").arg(_current.left(7).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::dddd_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::StringSection::beginWith(), QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  for(int i=1;i<=7; i++) {
    QString n=QDate::longDayName(i);
    if(_current.beginWith(n)) {
      _dayLong=n;
      _current+=n.count();
      return true;
    }
  }
  App::stream() << tr("expected a valid long day name: '%1'").arg(_current.left(7).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::h_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  _ampm=IgnoreAMPM;
  if(_current[0].isDigit() || _current[0].isSpace()) {
    if(_current[1].isDigit()) {
      _hour=_current.left(2).toInt();
      if(_hour<=23) {
        _current+=2;
        return true;
      }
    } else {
      _hour=_current.left(1).toInt();
      _current+=1;
      return true;
    }
  }
  App::stream() << tr("expected a number between 0 and 23: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::H_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() || _current[0].isSpace()) {
    if(_current[1].isDigit()) {
      _hour=_current.left(2).toInt();
      if(_hour<=12) {
        _current+=2;
        return true;
      }
    } else {
      _hour=_current.left(1).toInt();
      _current+=1;
      return true;
    }
  }
  App::stream() << tr("expected a number between 0 and 12: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::hh_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  _ampm=IgnoreAMPM;
  if(_current[0].isDigit() && _current[1].isDigit()) {
    _hour=_current.left(2).toInt();
    if(_hour<=23) {
      _current+=2;
      return true;
    }
  }
  App::stream() << tr("expected a number between 0 and 23: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::HH_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() && _current[1].isDigit()) {
    _hour=_current.left(2).toInt();
    if(_hour<=12) {
      _current+=2;
      return true;
    }
  }
  App::stream() << tr("expected a number between 0 and 12: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::M_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() || _current[0].isSpace()) {
    if(_current[1].isDigit()) {
      _month=_current.left(2).toInt();
      if(_month>=1 && _month<=12) {
        _current+=2;
        return true;
      }
    } else {
      _month=_current.left(1).toInt();
      if(_month>=1) {
        _current+=1;
        return true;
      }
    }
  }
  App::stream() << tr("expected a number between 1 and 12: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::m_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() || _current[0].isSpace()) {
    if(_current[1].isDigit()) {
      _minute=_current.left(2).toInt();
      if(_minute<=59) {
        _current+=2;
        return true;
      }
    } else {
      _minute=_current.left(1).toInt();
      _current+=1;
      return true;
    }
  }
  App::stream() << tr("expected a number between 0 and 59: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::MM_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() && _current[1].isDigit()) {
    _month=_current.left(2).toInt();
    if(_month>=1 && _month<=12) {
      _current+=2;
      return true;
    }
  }
  App::stream() << tr("expected a number between 01 and 12: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::mm_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() && _current[1].isDigit()) {
    _minute=_current.left(2).toInt();
    if(_minute<=59) {
      _current+=2;
      return true;
    }
  }
  App::stream() << tr("expected a number between 00 and 59: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::MMM_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::StringSection::beginWith(), QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  for(int i=1;i<=12; i++) {
    QString n=QDate::shortMonthName(i);
    if(_current.beginWith(n)) {
      _month=i;
      _current+=n.count();
      return true;
    }
  }
  App::stream() << tr("expected a valid short month name: '%1'").arg(_current.left(3).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::MMMM_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::StringSection::beginWith(), QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  for(int i=1;i<=12; i++) {
    QString n=QDate::longMonthName(i);
    if(_current.beginWith(n)) {
      _month=i;
      _current+=n.count();
      return true;
    }
  }
  App::stream() << tr("expected a valid long month name: '%1'").arg(_current.left(12).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::other_parsed ( const QChar &  c) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(c!=_current[0]) {
    App::stream() << tr("wrong character: '%1'").arg(_current.left(1).toString()) << endl;
    return false;
  } else {
    _current+=1;
    return true;
  }
}
bool QGpCoreTools::DateTimeFromString::quote_parsed ( const StringSection text) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::StringSection::beginWith(), QGpCoreTools::endl(), QGpCoreTools::StringSection::size(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current.beginWith(text)) {
    _current+=text.size();
    return true;
  }
  App::stream() << tr("expected '%1'").arg(text.toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::s_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() || _current[0].isSpace()) {
    if(_current[1].isDigit()) {
      _second=_current.left(2).toInt();
      if(_second<=59) {
        _current+=2;
        return true;
      }
    } else {
      _second=_current.left(1).toInt();
      _current+=1;
      return true;
    }
  }
  App::stream() << tr("expected a number between 0 and 59: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::ss_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() && _current[1].isDigit()) {
    _second=_current.left(2).toInt();
    if(_second<=59) {
      _current+=2;
      return true;
    }
  }
  App::stream() << tr("expected a number between 00 and 59: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::ssz_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toDouble(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() && _current[1].isDigit()) {
    _second=_current.left(2).toInt();
    _current+=2;
    if(_current[0]=='.' || _current[0]==',') {
      int i=1;
      while(_current[i].isDigit()) {
        i++;
      }
      _fraction=_current.left(i).toDouble();
      _current+=i;
    }
    return true;
  }
  App::stream() << tr("expected a decimal number between 00 and 60 (excluding 60): '%1'").arg(_current.left(10).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::sz_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toDouble(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() || _current[0].isSpace()) {
    int i;
    if(_current[1].isDigit()) {
      i=2;
    } else {
      i=1;
    }
    _second=_current.left(i).toInt();
    _current+=i;
    if(_current[0]=='.' || _current[0]==',') {
      i=1;
      while(_current[i].isDigit()) {
        i++;
      }
      _fraction=_current.left(i).toDouble();
      _current+=i;
    }
    return true;
  }
  App::stream() << tr("expected a decimal number between 0 and 60 (excluding 60): '%1'").arg(_current.left(10).toString()) << endl;
  return false;
}

References QGpCoreTools::DateTimeData::date(), QGpCoreTools::endl(), QGpCoreTools::DateTimeData::setDate(), QGpCoreTools::DateTimeData::setTime(), QGpCoreTools::App::stream(), and QGpCoreTools::tr().

Referenced by QGpCoreTools::DateTimeData::fromString().

{
  DateTimeData t;
  ok=true;
  if(!t.setDate(_year, _month, _day)) {
    App::stream() << tr("not a valid date") << endl;
    ok=false;
    return t;
  }
  if(!_dayShort.isEmpty() && _dayShort!=QDate::shortDayName(t.date().dayOfWeek())) {
    App::stream() << tr("%1 is not a %2").arg(t.date().toString("yyyy-MM-dd")).arg(_dayShort) << endl;
    ok=false;
  }
  if(!_dayLong.isEmpty() && _dayLong!=QDate::longDayName(t.date().dayOfWeek())) {
    App::stream() << tr("%1 is not a %2").arg(t.date().toString("yyyy-MM-dd")).arg(_dayLong) << endl;
    ok=false;
  }
  int h;
  switch(_ampm) {
  case UndefinedAMPM:
  case IgnoreAMPM:
    h=_hour;
    break;
  case AM:
    if(_hour>12) {
      App::stream() << tr("not a valid hour with am/pm") << endl;
      ok=false;
      return t;
    }
    h=_hour;
    break;
  case PM:
    if(_hour>12) {
      App::stream() << tr("not a valid hour with am/pm") << endl;
      ok=false;
      return t;
    }
    h=_hour+12;
    break;
  }
  if(!t.setTime(_hour, _minute, _second, _fraction)) {
    App::stream() << tr("not a valid time") << endl;
    ok=false;
  }
  return t;
}
bool QGpCoreTools::DateTimeFromString::yy_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() && _current[1].isDigit()) {
    _year=(QDate::currentDate().year()/100)*100+_current.left(2).toInt();
    _current+=2;
    return true;
  }
  App::stream() << tr("expected a number between 00 and 99: '%1'").arg(_current.left(2).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::yyyy_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() && _current[1].isDigit() &&
     _current[2].isDigit() && _current[3].isDigit()) {
    _year=_current.left(4).toInt();
    _current+=4;
    return true;
  }
  App::stream() << tr("expected a number between 0000 and 9999: '%1'").arg(_current.left(4).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::z_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() || _current[0].isSpace()) {
    if(_current[1].isDigit()) {
      if(_current[2].isDigit()) {
        _fraction=_current.left(3).toInt()*0.001;
        _current+=3;
      } else {
        _fraction=_current.left(2).toInt()*0.001;
        _current+=2;
      }
    } else {
      _fraction=_current.left(1).toInt()*0.001;
      _current+=1;
    }
    return true;
  }
  App::stream() << tr("expected a number between 0 and 999: '%1'").arg(_current.left(3).toString()) << endl;
  return false;
}
bool QGpCoreTools::DateTimeFromString::zzz_parsed ( ) [protected, virtual]

Implements QGpCoreTools::DateTimeParser.

References QGpCoreTools::endl(), QGpCoreTools::StringSection::left(), QGpCoreTools::App::stream(), QGpCoreTools::StringSection::toInt(), QGpCoreTools::StringSection::toString(), and QGpCoreTools::tr().

{
  if(_current[0].isDigit() &&
     _current[1].isDigit() &&
     _current[2].isDigit()) {
    _fraction=_current.left(3).toInt()*0.001;
    _current+=3;
    return true;
  }
  App::stream() << tr("expected a number between 000 and 999: '%1'").arg(_current.left(3).toString()) << endl;
  return false;
}

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines