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