DateValue.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <qregexp.h>
00025
00026 #include <kdebug.h>
00027
00028 #include <VCardDefines.h>
00029 #include <VCardDateValue.h>
00030 #include <VCardValue.h>
00031
00032 using namespace VCARD;
00033
00034 DateValue::DateValue()
00035 : Value()
00036 {
00037 vDebug("DateValue::DateValue()");
00038 }
00039
00040 DateValue::DateValue(
00041 unsigned int year,
00042 unsigned int month,
00043 unsigned int day,
00044 unsigned int hour,
00045 unsigned int minute,
00046 unsigned int second,
00047 double secFrac,
00048 bool zonePositive,
00049 unsigned int zoneHour,
00050 unsigned int zoneMinute)
00051 : Value (),
00052 year_ (year),
00053 month_ (month),
00054 day_ (day),
00055 hour_ (hour),
00056 minute_ (minute),
00057 second_ (second),
00058 zoneHour_ (zoneHour),
00059 zoneMinute_ (zoneMinute),
00060 secFrac_ (secFrac),
00061 zonePositive_ (zonePositive),
00062 hasTime_(true)
00063 {
00064 parsed_ = true;
00065 assembled_ = false;
00066 }
00067
00068 DateValue::DateValue(const QDate & d)
00069 : Value (),
00070 year_ (d.year()),
00071 month_ (d.month()),
00072 day_ (d.day()),
00073 hasTime_(false)
00074 {
00075 parsed_ = true;
00076 assembled_ = false;
00077 }
00078
00079 DateValue::DateValue(const QDateTime & d)
00080 : Value (),
00081 year_ (d.date().year()),
00082 month_ (d.date().month()),
00083 day_ (d.date().day()),
00084 hour_ (d.time().hour()),
00085 minute_ (d.time().minute()),
00086 second_ (d.time().second()),
00087 hasTime_(true)
00088 {
00089 parsed_ = true;
00090 assembled_ = false;
00091 }
00092
00093 DateValue::DateValue(const DateValue & x)
00094 : Value(x)
00095 {
00096 year_ = x.year_;
00097 month_ = x.month_;
00098 day_ = x.day_;
00099 hour_ = x.hour_;
00100 minute_ = x.minute_;
00101 second_ = x.second_;
00102 zoneHour_ = x.zoneHour_;
00103 zoneMinute_ = x.zoneMinute_;
00104 secFrac_ = x.secFrac_;
00105 hasTime_ = x.hasTime_;
00106 }
00107
00108 DateValue::DateValue(const QCString & s)
00109 : Value(s)
00110 {
00111 }
00112
00113 DateValue &
00114 DateValue::operator = (DateValue & x)
00115 {
00116 if (*this == x) return *this;
00117
00118 Value::operator = (x);
00119 return *this;
00120 }
00121
00122 DateValue &
00123 DateValue::operator = (const QCString & s)
00124 {
00125 Value::operator = (s);
00126 return *this;
00127 }
00128
00129 bool
00130 DateValue::operator == (DateValue & x)
00131 {
00132 x.parse();
00133 return false;
00134 }
00135
00136 DateValue::~DateValue()
00137 {
00138 }
00139
00140 DateValue *
00141 DateValue::clone()
00142 {
00143 return new DateValue( *this );
00144 }
00145
00146 void
00147 DateValue::_parse()
00148 {
00149 vDebug("DateValue::_parse()");
00150
00151
00152
00153
00154
00155 int timeSep = strRep_.find('T');
00156
00157 QCString dateStr;
00158 QCString timeStr;
00159
00160 if (timeSep == -1) {
00161
00162 dateStr = strRep_;
00163 vDebug("Has date string \"" + dateStr + "\"");
00164
00165 } else {
00166
00167 dateStr = strRep_.left(timeSep);
00168 vDebug("Has date string \"" + dateStr + "\"");
00169
00170 timeStr = strRep_.mid(timeSep + 1);
00171 vDebug("Has time string \"" + timeStr + "\"");
00172 }
00173
00175
00176 dateStr.replace(QRegExp("-"), "");
00177
00178 kdDebug(5710) << "dateStr: " << dateStr << endl;
00179
00180 year_ = dateStr.left(4).toInt();
00181 month_ = dateStr.mid(4, 2).toInt();
00182 day_ = dateStr.right(2).toInt();
00183
00184 if (timeSep == -1) {
00185 hasTime_ = false;
00186 return;
00187 }
00188 else
00189 hasTime_ = true;
00190
00192
00194
00195 int zoneSep = timeStr.find('Z');
00196
00197 if (zoneSep != -1 && timeStr.length() - zoneSep > 3) {
00198
00199 QCString zoneStr(timeStr.mid(zoneSep + 1));
00200 vDebug("zoneStr == " + zoneStr);
00201
00202 zonePositive_ = (zoneStr[0] == '+');
00203 zoneHour_ = zoneStr.mid(1, 2).toInt();
00204 zoneMinute_ = zoneStr.right(2).toInt();
00205
00206 timeStr.remove(zoneSep, timeStr.length() - zoneSep);
00207 }
00208
00210
00211 int secFracSep = timeStr.findRev(',');
00212
00213 if (secFracSep != -1 && zoneSep != -1) {
00214 QCString quirkafleeg = "0." + timeStr.mid(secFracSep + 1, zoneSep);
00215 secFrac_ = quirkafleeg.toDouble();
00216 }
00217
00219
00220 timeStr.replace(QRegExp(":"), "");
00221
00222 hour_ = timeStr.left(2).toInt();
00223 minute_ = timeStr.mid(2, 2).toInt();
00224 second_ = timeStr.mid(4, 2).toInt();
00225 }
00226
00227 void
00228 DateValue::_assemble()
00229 {
00230 vDebug("DateValue::_assemble");
00231
00232 QCString year;
00233 QCString month;
00234 QCString day;
00235
00236 year.setNum( year_ );
00237 month.setNum( month_ );
00238 day.setNum( day_ );
00239
00240 if ( month.length() < 2 ) month.prepend( "0" );
00241 if ( day.length() < 2 ) day.prepend( "0" );
00242
00243 strRep_ = year + '-' + month + '-' + day;
00244
00245 if ( hasTime_ ) {
00246 QCString hour;
00247 QCString minute;
00248 QCString second;
00249
00250 hour.setNum( hour_ );
00251 minute.setNum( minute_ );
00252 second.setNum( second_ );
00253
00254 if ( hour.length() < 2 ) hour.prepend( "0" );
00255 if ( minute.length() < 2 ) minute.prepend( "0" );
00256 if ( second.length() < 2 ) second.prepend( "0" );
00257
00258 strRep_ += 'T' + hour + ':' + minute + ':' + second + 'Z';
00259 }
00260 }
00261
00262 unsigned int
00263 DateValue::year()
00264 {
00265 parse();
00266 return year_;
00267 }
00268
00269 unsigned int
00270 DateValue::month()
00271 {
00272 parse();
00273 return month_;
00274 }
00275
00276 unsigned int
00277 DateValue::day()
00278 {
00279 parse();
00280 return day_;
00281 }
00282 unsigned int
00283 DateValue::hour()
00284 {
00285 parse();
00286 return hour_;
00287 }
00288
00289 unsigned int
00290 DateValue::minute()
00291 {
00292 parse();
00293 return minute_;
00294 }
00295
00296 unsigned int
00297 DateValue::second()
00298 {
00299 parse();
00300 return second_;
00301 }
00302
00303 double
00304 DateValue::secondFraction()
00305 {
00306 parse();
00307 return secFrac_;
00308 }
00309
00310 bool
00311 DateValue::zonePositive()
00312 {
00313 parse();
00314 return zonePositive_;
00315 }
00316
00317 unsigned int
00318 DateValue::zoneHour()
00319 {
00320 parse();
00321 return zoneHour_;
00322 }
00323
00324 unsigned int
00325 DateValue::zoneMinute()
00326 {
00327 parse();
00328 return zoneMinute_;
00329 }
00330
00331 void
00332 DateValue::setYear(unsigned int i)
00333 {
00334 year_ = i;
00335 assembled_ = false;
00336 }
00337
00338 void
00339 DateValue::setMonth(unsigned int i)
00340 {
00341 month_ = i;
00342 assembled_ = false;
00343 }
00344
00345 void
00346 DateValue::setDay(unsigned int i)
00347 {
00348 day_ = i;
00349 assembled_ = false;
00350 }
00351
00352 void
00353 DateValue::setHour(unsigned int i)
00354 {
00355 hour_ = i;
00356 assembled_ = false;
00357 }
00358
00359 void
00360 DateValue::setMinute(unsigned int i)
00361 {
00362 minute_ = i;
00363 assembled_ = false;
00364 }
00365
00366 void
00367 DateValue::setSecond(unsigned int i)
00368 {
00369 second_ = i;
00370 assembled_ = false;
00371 }
00372
00373 void
00374 DateValue::setSecondFraction(double d)
00375 {
00376 secFrac_ = d;
00377 assembled_ = false;
00378 }
00379
00380 void
00381 DateValue::setZonePositive(bool b)
00382 {
00383 zonePositive_ = b;
00384 assembled_ = false;
00385 }
00386
00387 void
00388 DateValue::setZoneHour(unsigned int i)
00389 {
00390 zoneHour_ = i;
00391 assembled_ = false;
00392 }
00393
00394 void
00395 DateValue::setZoneMinute(unsigned int i)
00396 {
00397 zoneMinute_ = i;
00398 assembled_ = false;
00399 }
00400
00401 QDate
00402 DateValue::qdate()
00403 {
00404 parse();
00405 QDate d(year_, month_, day_);
00406 return d;
00407 }
00408
00409 QTime
00410 DateValue::qtime()
00411 {
00412 parse();
00413 QTime t(hour_, minute_, second_);
00414
00415 return t;
00416 }
00417
00418 QDateTime
00419 DateValue::qdt()
00420 {
00421 parse();
00422 QDateTime dt;
00423 dt.setDate(qdate());
00424 dt.setTime(qtime());
00425 return dt;
00426 }
00427
00428 bool
00429 DateValue::hasTime()
00430 {
00431 parse();
00432 return hasTime_;
00433 }
00434
This file is part of the documentation for kdelibs Version 3.1.5.