QGpCoreTools/DateTime.h
Go to the documentation of this file.
00001 /***************************************************************************
00002 **
00003 **  This file is part of QGpCoreTools.
00004 **
00005 **  This library is free software; you can redistribute it and/or
00006 **  modify it under the terms of the GNU Lesser General Public
00007 **  License as published by the Free Software Foundation; either
00008 **  version 2.1 of the License, or (at your option) any later version.
00009 **
00010 **  This file is distributed in the hope that it will be useful, but WITHOUT
00011 **  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00012 **  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
00013 **  License for more details.
00014 **
00015 **  You should have received a copy of the GNU Lesser General Public
00016 **  License along with this library; if not, write to the Free Software
00017 **  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
00018 **
00019 **  See http://www.geopsy.org for more information.
00020 **
00021 **  Created : 2009-10-24
00022 **  Authors :
00023 **    Marc Wathelet
00024 **    Marc Wathelet (LGIT, Grenoble, France)
00025 **
00026 ***************************************************************************/
00027 
00028 #ifndef DATETIME_H
00029 #define DATETIME_H
00030 
00031 #include <QtCore>
00032 
00033 #include "QGpCoreToolsDLLExport.h"
00034 #include "Translations.h"
00035 
00036 namespace QGpCoreTools {
00037 
00038 #ifndef CAP
00039 /************************************************/
00040 /* an older struct remaining from PITSA         */
00041 /*************************************************/
00042 typedef struct  PitsaTime  {
00043                 int           yr;     /* year         */
00044                 int           mo;     /* month        */
00045                 int           day;    /* day          */
00046                 int           hr;     /* hour         */
00047                 int           mn;     /* minute       */
00048                 float         sec;    /* second       */
00049                 int           base;   /* GMT, DST,etc.*/
00050                 } TIME;
00051 #endif
00052 
00053 class QGPCORETOOLS_EXPORT DateTimeData: public QSharedData
00054 {
00055 public:
00056   inline DateTimeData();
00057   inline DateTimeData(const QDateTime& dt);
00058   inline DateTimeData(const DateTimeData& o);
00059   ~DateTimeData() {}
00060 
00061   inline bool operator==(const DateTimeData& o);
00062   inline bool operator!=(const DateTimeData& o);
00063   inline bool operator<(const DateTimeData& o);
00064   inline bool operator>(const DateTimeData& o);
00065   inline void operator=(const DateTimeData& o);
00066 
00067   void addSeconds(double s);
00068   void addMinutes(int m);
00069   void addHours(int h);
00070   inline void addDays(int d);
00071   inline void addMonths(int m);
00072   inline void addYears(int y);
00073 
00074   void fromTime_t(time_t t);
00075   void fromTime_t(QString t);
00076   time_t toTime_t() const;
00077   QString toTime_t(int precision) const;
00078   bool fromString(const QString & text, const QString & format);
00079   QString toString(const QString & format, int precision) const;
00080 
00081   QDate date() const {return _date;}
00082   inline QDateTime dateTime() const;
00083   inline bool setDate(int year=1900, int month=1, int day=1);
00084   inline void setDate(const QDate& d);
00085   inline void setDateTime(const QDateTime& dt);
00086 
00087   int hour() const {return _seconds/3600;}
00088   int minute() const {return _seconds/60-hour()*60;}
00089   int second() const {return _seconds-(_seconds/60)*60;}
00090   double fractions() const {return _fractions;}
00091   bool setTime(int hour=0, int minute=0, int second=0, double fractions=0.0);
00092 
00093   double secondsTo(const DateTimeData& o) const;
00094   bool isNull() const {return _date.isNull() && _seconds==0 && _fractions==0.0;}
00095 private:
00096   QDate _date;
00097   int _seconds;
00098   double _fractions;
00099 };
00100 
00101 inline DateTimeData::DateTimeData()
00102 {
00103   _seconds=0;
00104   _fractions=0.0;
00105 }
00106 
00107 inline DateTimeData::DateTimeData(const QDateTime& dt)
00108     : QSharedData()
00109 {
00110   _date=dt.date();
00111   _seconds=QTime(0,0).secsTo(dt.time());
00112   _fractions=0;
00113 }
00114 
00115 inline DateTimeData::DateTimeData(const DateTimeData& o)
00116     : QSharedData(o)
00117 {
00118   _date=o._date;
00119   _seconds=o._seconds;
00120   _fractions=o._fractions;
00121 }
00122 
00123 inline bool DateTimeData::operator==(const DateTimeData& o)
00124 {
00125   return _date==o._date &&
00126          _seconds==o._seconds &&
00127          _fractions==o._fractions;
00128 }
00129 
00130 inline bool DateTimeData::operator!=(const DateTimeData& o)
00131 {
00132   return _date!=o._date ||
00133          _seconds!=o._seconds ||
00134          _fractions!=o._fractions;
00135 }
00136 
00137 inline bool DateTimeData::operator<(const DateTimeData& o)
00138 {
00139   if(_date==o._date) {
00140     if(_seconds==o._seconds) {
00141       return _fractions<o._fractions;
00142     } else {
00143       return _seconds<o._seconds;
00144     }
00145   } else {
00146     return _date<o._date;
00147   }
00148 }
00149 
00150 inline bool DateTimeData::operator>(const DateTimeData& o)
00151 {
00152   if(_date==o._date) {
00153     if(_seconds==o._seconds) {
00154       return _fractions>o._fractions;
00155     } else {
00156       return _seconds>o._seconds;
00157     }
00158   } else {
00159     return _date>o._date;
00160   }
00161 }
00162 
00163 inline void DateTimeData::operator=(const DateTimeData& o)
00164 {
00165   _date=o._date;
00166   _seconds=o._seconds;
00167   _fractions=o._fractions;
00168 }
00169 
00170 inline void DateTimeData::addDays(int d)
00171 {
00172   _date=_date.addDays(d);
00173 }
00174 
00175 inline void DateTimeData::addMonths(int m)
00176 {
00177   _date.addMonths(m);
00178 }
00179 
00180 inline void DateTimeData::addYears(int y)
00181 {
00182   _date.addYears(y);
00183 }
00184 
00185 inline bool DateTimeData::setDate(int year, int month, int day)
00186 {
00187   return _date.setDate(year, month, day);
00188 }
00189 
00190 inline void DateTimeData::setDate(const QDate& d)
00191 {
00192   _date=d;
00193 }
00194 
00195 inline void DateTimeData::setDateTime(const QDateTime& dt)
00196 {
00197   _date=dt.date();
00198   _seconds=QTime(0,0,0).secsTo(dt.time());
00199   _fractions=dt.time().msec()*0.001;
00200 }
00201 
00202 inline QDateTime DateTimeData::dateTime() const
00203 {
00204   QDateTime dt(_date);
00205   dt=dt.addSecs(_seconds);
00206   return dt;
00207 }
00208 
00209 class QGPCORETOOLS_EXPORT DateTime
00210 {
00211   TRANSLATIONS("DateTime")
00212 public:
00213   DateTime() {_d=new DateTimeData;}
00214   DateTime(const QDateTime& dt) {_d=new DateTimeData(dt);}
00215   DateTime(const DateTime& o) : _d(o._d) {}
00216   ~DateTime() {}
00217 
00218   bool operator==(const DateTime& o) {return *_d==*o._d;}
00219   bool operator!=(const DateTime& o) {return *_d!=*o._d;}
00220   bool operator<(const DateTime& o) {return *_d<*o._d;}
00221   bool operator>(const DateTime& o) {return *_d>*o._d;}
00222   void operator=(const DateTime& o) {return *_d=*o._d;}
00223 
00224   void addSeconds(double s) {_d->addSeconds(s);}
00225   void addMinutes(int m) {_d->addMinutes(m);}
00226   void addHours(int h) {_d->addHours(h);}
00227   void addDays(int d) {_d->addDays(d);}
00228   void addMonths(int m) {_d->addMonths(m);}
00229   void addYears(int y) {_d->addYears(y);}
00230 
00231   void fromTime_t(time_t t) {_d->fromTime_t(t);}
00232   void fromTime_t(QString t) {_d->fromTime_t(t);}
00233   time_t toTime_t() const {return _d->toTime_t();}
00234   QString toTime_t(int precision) const {return _d->toTime_t(precision);}
00235   bool fromString(const QString & text, const QString & format) {return _d->fromString(text, format);}
00236   QString toString(const QString & format, int precision=6) const {return _d->toString(format, precision);}
00237 
00238   QDate date() const {return _d->date();}
00239   inline QDateTime dateTime() const {return _d->dateTime();}
00240   bool setDate(int year=1900, int month=1, int day=1) {return _d->setDate(year, month, day);}
00241   void setDate(const QDate& d) {_d->setDate(d);}
00242   void setDateTime(const QDateTime& dt) {_d->setDateTime(dt);}
00243 
00244   int hour() const {return _d->hour();}
00245   int minute() const {return _d->minute();}
00246   int second() const {return _d->second();}
00247   double fractions() const {return _d->fractions();}
00248   bool setTime(int hour=0, int minute=0, int second=0, double fractions=0.0) {
00249     return _d->setTime(hour, minute, second, fractions);
00250   }
00251 
00252   double secondsTo(const DateTime& o) const {return _d->secondsTo(*o._d);}
00253   bool isNull() const {return _d->isNull();}
00254 
00255   static TIME capAddSecs(QDateTime dt, double secs);
00256 private:
00257   QSharedDataPointer<DateTimeData> _d;
00258 };
00259 
00260 } // namespace QGpCoreTools
00261 
00262 #endif // DATETIME_H
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines