Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
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
00041
00042 typedef struct PitsaTime {
00043 int yr;
00044 int mo;
00045 int day;
00046 int hr;
00047 int mn;
00048 float sec;
00049 int base;
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 }
00261
00262 #endif // DATETIME_H