Qore Programming Language  0.8.7
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
DateTime.h
1 /* -*- mode: c++; indent-tabs-mode: nil -*- */
2 /*
3  DateTime.h
4 
5  Qore programming language
6 
7  Copyright 2003 - 2013 David Nichols
8 
9  This library is free software; you can redistribute it and/or
10  modify it under the terms of the GNU Lesser General Public
11  License as published by the Free Software Foundation; either
12  version 2.1 of the License, or (at your option) any later version.
13 
14  This library is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  Lesser General Public License for more details.
18 
19  You should have received a copy of the GNU Lesser General Public
20  License along with this library; if not, write to the Free Software
21  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23 
24 #ifndef QORE_DATETIME_H
25 
26 #define QORE_DATETIME_H
27 
28 #include <time.h>
29 
30 class AbstractQoreZoneInfo;
31 
33 struct qore_tm {
34  int year, month, day, hour, minute, second, us, utc_secs_east;
35  bool dst;
36  const char *zone_name;
37  const AbstractQoreZoneInfo *zone;
38 
39  DLLLOCAL void clear() {
40  year = 0;
41  month = 0;
42  day = 0;
43  hour = 0;
44  minute = 0;
45  second = 0;
46  us = 0;
47  utc_secs_east = 0;
48  dst = false;
49  zone_name = 0;
50  zone = 0;
51  }
52 
53  DLLLOCAL bool isTimeNull() const {
54  return !hour && !minute && !second && !us;
55  }
56 
58  DLLEXPORT int secsEast() const;
59 
61  DLLEXPORT const char *regionName() const;
62 };
63 
65 
85 class DateTime {
86  friend class DateTimeNode;
87 
88 protected:
90  class qore_date_private *priv;
91 
92  DLLLOCAL void setDateLiteral(int64 date);
93  DLLLOCAL void setRelativeDateLiteral(int64 date);
94 
96  DLLLOCAL DateTime& operator=(const DateTime&);
97 
99  DLLLOCAL DateTime(qore_date_private *n_priv);
100 
101 public:
103 
106  DLLEXPORT DateTime(bool r = false);
107 
109 
119  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);
120 
122 
125  DLLEXPORT DateTime(int64 seconds);
126 
128 
132  DLLEXPORT DateTime(int64 seconds, int ms);
133 
135 
137  DLLEXPORT DateTime(const char *date);
138 
140 
143  DLLEXPORT DateTime(const AbstractQoreZoneInfo *zone, const char *date);
144 
146 
149  DLLEXPORT DateTime(const struct tm *tms);
150 
152  DLLEXPORT DateTime(const DateTime &dt);
153 
155  DLLEXPORT ~DateTime();
156 
158  DLLEXPORT void getTM(struct tm *tms) const;
159 
161 
163  DLLEXPORT void setNow();
164 
166 
169  DLLEXPORT void setNow(const AbstractQoreZoneInfo *zone);
170 
172 
175  DLLEXPORT void setDate(int64 seconds);
176 
178 
182  DLLEXPORT void setDate(int64 seconds, int ms);
183 
185 
189  DLLEXPORT void setDate(const AbstractQoreZoneInfo *zone, int64 seconds, int us);
190 
192 
196  DLLEXPORT void setLocalDate(const AbstractQoreZoneInfo *zone, int64 seconds, int us);
197 
199  DLLEXPORT void setDate(const AbstractQoreZoneInfo *n_zone, int n_year, int n_month, int n_day, int n_hour = 0, int n_minute = 0, int n_second = 0, int n_us = 0);
200 
202 
205  DLLEXPORT void setDate(const char *str);
206 
208 
212  DLLEXPORT void setDate(const AbstractQoreZoneInfo *zone, const char *str);
213 
215  DLLEXPORT void setRelativeDate(const char *str);
216 
218  DLLEXPORT void setDate(const struct tm *tms, short ms = 0);
219 
221  DLLEXPORT void setDate(const DateTime &date);
222 
224 
230  DLLEXPORT void setTime(int h, int m, int s, short ms = 0);
231 
232  DLLEXPORT bool checkValidity() const;
233  DLLEXPORT bool isEqual(const DateTime *dt) const;
234  DLLEXPORT DateTime *add(const DateTime *dt) const;
235  DLLEXPORT DateTime *subtractBy(const DateTime *dt) const;
236 
238 
241  DLLEXPORT int64 getEpochSeconds() const;
242 
244 
247  DLLEXPORT int64 getEpochSecondsUTC() const;
248 
250 
253  DLLEXPORT int64 getEpochMicrosecondsUTC() const;
254 
256 
259  DLLEXPORT int64 getEpochMillisecondsUTC() const;
260 
262 
265  DLLEXPORT int getDayNumber() const;
266 
268 
271  DLLEXPORT int getDayOfWeek() const;
272 
274 
279  DLLEXPORT void getISOWeek(int &year, int &week, int &day) const;
280 
282 
321  DLLEXPORT void format(QoreString &str, const char *fmt) const;
322 
324 
327  DLLEXPORT bool isRelative() const;
328 
330 
333  DLLEXPORT bool isAbsolute() const;
334 
336 
339  DLLEXPORT short getYear() const;
340 
342 
345  DLLEXPORT int getMonth() const;
346 
348 
351  DLLEXPORT int getDay() const;
352 
354 
357  DLLEXPORT int getHour() const;
358 
360 
363  DLLEXPORT int getMinute() const;
364 
366 
369  DLLEXPORT int getSecond() const;
370 
372 
375  DLLEXPORT int getMillisecond() const;
376 
378 
380  DLLEXPORT int getMicrosecond() const;
381 
383 
386  DLLEXPORT int64 getRelativeSeconds() const;
387 
389 
392  DLLEXPORT int64 getRelativeMilliseconds() const;
393 
395 
398  DLLEXPORT int64 getRelativeMicroseconds() const;
399 
401  DLLEXPORT bool hasValue() const;
402 
404  DLLEXPORT DateTime *unaryMinus() const;
405 
407  DLLEXPORT void unaryMinusInPlace();
408 
410  DLLEXPORT void getInfo(const AbstractQoreZoneInfo *n_zone, qore_tm &info) const;
411 
413  DLLEXPORT void getInfo(qore_tm &info) const;
414 
416  DLLEXPORT void setZone(const AbstractQoreZoneInfo *n_zone);
417 
419  DLLEXPORT const AbstractQoreZoneInfo* getZone() const;
420 
421  // static methods
423  DLLEXPORT static bool isLeapYear(int year);
424 
426  DLLEXPORT static int getLastDayOfMonth(int month, int year);
427 
429 
437  DLLEXPORT static DateTime *getDateFromISOWeek(int year, int week, int day, ExceptionSink *xsink);
438 
440  DLLEXPORT static int compareDates(const DateTime *left, const DateTime *right);
441 
443  DLLEXPORT static DateTime *makeAbsolute(const AbstractQoreZoneInfo *n_zone, int n_year, int n_month, int n_day, int n_hour = 0, int n_minute = 0, int n_second = 0, int n_us = 0);
444 
446 
451  DLLEXPORT static DateTime *makeAbsolute(const AbstractQoreZoneInfo *zone, int64 seconds, int us = 0);
452 
454 
459  DLLEXPORT static DateTime *makeAbsoluteLocal(const AbstractQoreZoneInfo *zone, int64 seconds, int us = 0);
460 
462  DLLEXPORT static DateTime *makeRelative(int n_year, int n_month, int n_day, int n_hour = 0, int n_minute = 0, int n_second = 0, int n_us = 0);
463 };
464 
465 #endif