00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef QORE_DATETIME_H
00024
00025 #define QORE_DATETIME_H
00026
00027 #include <time.h>
00028
00030
00037 class DateTime {
00038 friend class DateTimeNode;
00039
00040 private:
00041
00042 static const int month_lengths[];
00043
00044 static const int positive_months[];
00045 static const int negative_months[];
00046
00048 struct qore_dt_private *priv;
00049
00051
00055 DLLLOCAL void addAbsoluteToRelative(DateTime &result, const class DateTime *dt) const;
00056
00058
00062 DLLLOCAL void addRelativeToRelative(DateTime &result, const class DateTime *dt) const;
00063
00065
00069 DLLLOCAL void subtractAbsoluteByRelative(DateTime &result, const class DateTime *dt) const;
00070
00072
00076 DLLLOCAL void subtractRelativeByRelative(DateTime &result, const class DateTime *dt) const;
00077
00079 DLLLOCAL void calcDifference(DateTime &result, const class DateTime *dt) const;
00080 DLLLOCAL void setDateLiteral(int64 date);
00081 DLLLOCAL void setRelativeDateLiteral(int64 date);
00082
00083
00084 DLLLOCAL static int positive_leap_years(int year, int month);
00085 DLLLOCAL static int negative_leap_years(int year);
00086
00087
00088 DLLLOCAL static int getDayOfWeek(int year, int month, int day);
00089 DLLLOCAL static int64 getEpochSeconds(int year, int month, int day);
00090
00091
00092 DLLLOCAL static int getDateFromISOWeekIntern(DateTime &result, int year, int week, int day, class ExceptionSink *xsink);
00093
00095 DLLLOCAL DateTime& operator=(const DateTime&);
00096
00097 public:
00099
00102 DLLEXPORT DateTime(bool r = false);
00103
00105
00115 DLLEXPORT DateTime(int n_year, int n_month, int n_day, int n_hour = 0, int n_minute = 0, int n_second = 0, short n_ms = 0, bool n_relative = false);
00116
00118
00121 DLLEXPORT DateTime(int64 seconds);
00122
00124
00128 DLLEXPORT DateTime(int64 seconds, int ms);
00129
00131
00134 DLLEXPORT DateTime(const char *date);
00135
00137
00140 DLLEXPORT DateTime(const struct tm *tms);
00141
00143 DLLEXPORT DateTime(const DateTime &dt);
00144
00146 DLLEXPORT ~DateTime();
00147
00149 DLLEXPORT void getTM(struct tm *tms) const;
00150
00152
00155 DLLEXPORT void setDate(int64 seconds);
00156
00158
00162 DLLEXPORT void setDate(int64 seconds, int ms);
00163
00165
00168 DLLEXPORT void setDate(const char *str);
00169
00171 DLLEXPORT void setRelativeDate(const char *str);
00172
00174 DLLEXPORT void setDate(const struct tm *tms, short ms = 0);
00175
00177 DLLEXPORT void setDate(const DateTime &date);
00178
00180
00186 DLLEXPORT void setTime(int h, int m, int s, short ms = 0);
00187
00188 DLLEXPORT bool checkValidity() const;
00189 DLLEXPORT bool isEqual(const class DateTime *dt) const;
00190 DLLEXPORT class DateTime *add(const class DateTime *dt) const;
00191 DLLEXPORT class DateTime *subtractBy(const class DateTime *dt) const;
00192
00194
00197 DLLEXPORT int64 getEpochSeconds() const;
00198
00200
00203 DLLEXPORT int getDayNumber() const;
00204
00206
00209 DLLEXPORT int getDayOfWeek() const;
00210
00212
00217 DLLEXPORT void getISOWeek(int &year, int &week, int &day) const;
00218
00220
00252 DLLEXPORT void format(class QoreString &str, const char *fmt) const;
00253
00255
00258 DLLEXPORT bool isRelative() const;
00259
00261
00264 DLLEXPORT bool isAbsolute() const;
00265
00267
00270 DLLEXPORT short getYear() const;
00271
00273
00276 DLLEXPORT int getMonth() const;
00277
00279
00282 DLLEXPORT int getDay() const;
00283
00285
00288 DLLEXPORT int getHour() const;
00289
00291
00294 DLLEXPORT int getMinute() const;
00295
00297
00300 DLLEXPORT int getSecond() const;
00301
00303
00306 DLLEXPORT int getMillisecond() const;
00307
00309
00312 DLLEXPORT int64 getRelativeSeconds() const;
00313
00315
00318 DLLEXPORT int64 getRelativeMilliseconds() const;
00319
00320
00322 DLLEXPORT static bool isLeapYear(int year);
00323
00325 DLLEXPORT static int getLastDayOfMonth(int month, int year);
00326
00328
00336 DLLEXPORT static class DateTime *getDateFromISOWeek(int year, int week, int day, class ExceptionSink *xsink);
00337
00339 DLLEXPORT static int compareDates(const class DateTime *left, const class DateTime *right);
00340 };
00341
00342 #endif