kabc Library API Documentation

DateValue.cpp

00001 /*
00002         libvcard - vCard parsing library for vCard version 3.0
00003 
00004         Copyright (C) 1998 Rik Hemsley rik@kde.org
00005         
00006   Permission is hereby granted, free of charge, to any person obtaining a copy
00007   of this software and associated documentation files (the "Software"), to
00008   deal in the Software without restriction, including without limitation the
00009   rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
00010   sell copies of the Software, and to permit persons to whom the Software is
00011   furnished to do so, subject to the following conditions:
00012 
00013   The above copyright notice and this permission notice shall be included in
00014   all copies or substantial portions of the Software.
00015 
00016   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00017   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00018   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
00019   AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
00020   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
00021   WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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         // date = date-full-year ["-"] date-month ["-"] date-mday
00152         // time = time-hour [":"] time-minute [":"] time-second [":"]
00153         // [time-secfrac] [time-zone]
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; // No time, done.
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) { // zoneSep checked to avoid errors.
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 //      t.setMs(1 / secFrac_);
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 
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.5.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Wed Jan 28 13:29:19 2004 by doxygen 1.3.4 written by Dimitri van Heesch, © 1997-2001