]> git.saurik.com Git - wxWidgets.git/blame - include/wx/datetime.h
Fixing another hard-coded WXDIR path
[wxWidgets.git] / include / wx / datetime.h
CommitLineData
0979c962
VZ
1/////////////////////////////////////////////////////////////////////////////
2// Name: wx/datetime.h
3// Purpose: declarations of time/date related classes (wxDateTime,
4// wxTimeSpan)
5// Author: Vadim Zeitlin
6// Modified by:
7// Created: 10.02.99
8// RCS-ID: $Id$
9// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
10// Licence: wxWindows license
11/////////////////////////////////////////////////////////////////////////////
12
2f02cb89
VZ
13#ifndef _WX_DATETIME_H
14#define _WX_DATETIME_H
0979c962
VZ
15
16#ifdef __GNUG__
17 #pragma interface "datetime.h"
18#endif
19
20#include <time.h>
b76b015e 21#include <limits.h> // for INT_MIN
0979c962
VZ
22
23#include "wx/longlong.h"
24
25class WXDLLEXPORT wxDateTime;
26class WXDLLEXPORT wxTimeSpan;
27class WXDLLEXPORT wxDateSpan;
28
2f02cb89
VZ
29// don't use inline functions in debug builds - we don't care about
30// performances and this only leads to increased rebuild time (because every
31// time an inline method is changed, all files including the header must be
32// rebuilt)
33#ifdef __WXDEBUG__
34 #define inline
35#endif // Debug
36
0979c962
VZ
37/*
38 * TODO Well, everything :-)
39 *
299fcbfe
VZ
40 * + 1. Time zones with minutes (make TimeZone a class)
41 * 2. getdate() function like under Solaris
42 * + 3. text conversion for wxDateSpan
43 * 4. pluggable modules for the workdays calculations
0979c962
VZ
44 */
45
46/*
299fcbfe 47 The three (main) classes declared in this header represent:
0979c962
VZ
48
49 1. An absolute moment in the time (wxDateTime)
50 2. A difference between two moments in the time, positive or negative
51 (wxTimeSpan)
52 3. A logical difference between two dates expressed in
53 years/months/weeks/days (wxDateSpan)
54
55 The following arithmetic operations are permitted (all others are not):
56
57 addition
58 --------
59
60 wxDateTime + wxTimeSpan = wxDateTime
61 wxDateTime + wxDateSpan = wxDateTime
62 wxTimeSpan + wxTimeSpan = wxTimeSpan
63 wxDateSpan + wxDateSpan = wxDateSpan
64
65 substraction
66 ------------
67 wxDateTime - wxDateTime = wxTimeSpan
68 wxTimeSpan - wxTimeSpan = wxTimeSpan
69 wxDateSpan - wxDateSpan = wxDateSpan
70
71 multiplication
72 --------------
73 wxTimeSpan * number = wxTimeSpan
74 wxDateSpan * number = wxDateSpan
75
76 unitary minus
77 -------------
78 -wxTimeSpan = wxTimeSpan
79 -wxDateSpan = wxDateSpan
80*/
81
82// ----------------------------------------------------------------------------
83// This class represents an absolute moment in the time
84// ----------------------------------------------------------------------------
b76b015e 85
0979c962
VZ
86class WXDLLEXPORT wxDateTime
87{
88public:
89 // types
90 // ------------------------------------------------------------------------
91
92 // a small unsigned integer type for storing things like seconds, days
93 // of the week, &c. It should be at least short (i.e. not char) to
94 // contain the number of milliseconds - it may also be 'int' because
95 // there is no size penalty associated with it in our code, we don't
96 // store any data in this format
97 typedef unsigned short wxDateTime_t;
98
99 // the timezones
b76b015e 100 enum TZ
0979c962
VZ
101 {
102 // the time in the current time zone
103 Local,
104
105 // zones from GMT (= Greenwhich Mean Time): they're guaranteed to be
106 // consequent numbers, so writing something like `GMT0 + offset' is
107 // safe if abs(offset) <= 12
108
109 // underscore stands for minus
110 GMT_12, GMT_11, GMT_10, GMT_9, GMT_8, GMT_7,
111 GMT_6, GMT_5, GMT_4, GMT_3, GMT_2, GMT_1,
112 GMT0,
113 GMT1, GMT2, GMT3, GMT4, GMT5, GMT6,
114 GMT7, GMT8, GMT9, GMT10, GMT11, GMT12,
115 // Note that GMT12 and GMT_12 are not the same: there is a difference
116 // of exactly one day between them
117
fcc3d7cb
VZ
118 // some symbolic names for TZ
119
120 // Europe
121 WET = GMT0, // Western Europe Time
122 WEST = GMT1, // Western Europe Summer Time
123 CET = GMT1, // Central Europe Time
124 CEST = GMT2, // Central Europe Summer Time
125 EET = GMT2, // Eastern Europe Time
126 EEST = GMT3, // Eastern Europe Summer Time
127 MSK = GMT3, // Moscow Time
128 MSD = GMT4, // Moscow Summer Time
129
130 // US and Canada
131 AST = GMT_4, // Atlantic Standard Time
132 ADT = GMT_3, // Atlantic Daylight Time
133 EST = GMT_5, // Eastern Standard Time
134 EDT = GMT_4, // Eastern Daylight Saving Time
135 CST = GMT_6, // Central Standard Time
136 CDT = GMT_5, // Central Daylight Saving Time
137 MST = GMT_7, // Mountain Standard Time
138 MDT = GMT_6, // Mountain Daylight Saving Time
139 PST = GMT_8, // Pacific Standard Time
140 PDT = GMT_7, // Pacific Daylight Saving Time
141 HST = GMT_10, // Hawaiian Standard Time
142 AKST = GMT_9, // Alaska Standard Time
143 AKDT = GMT_8, // Alaska Daylight Saving Time
144
145 // Australia
146
147 A_WST = GMT8, // Western Standard Time
148 A_CST = GMT12 + 1, // Central Standard Time (+9.5)
149 A_EST = GMT10, // Eastern Standard Time
150 A_ESST = GMT11, // Eastern Summer Time
151
152 // TODO add more symbolic timezone names here
153
154 // Universal Coordinated Time = the new and politically correct name
155 // for GMT
0979c962 156 UTC = GMT0
0979c962
VZ
157 };
158
159 // the calendar systems we know about: notice that it's valid (for
160 // this classes purpose anyhow) to work with any of these calendars
161 // even with the dates before the historical appearance of the
162 // calendar
163 enum Calendar
164 {
165 Gregorian, // current calendar
166 Julian // calendar in use since -45 until the 1582 (or later)
167
168 // TODO Hebrew, Chinese, Maya, ... (just kidding) (or then may be not?)
169 };
170
171 // these values only are used to identify the different dates of
172 // adoption of the Gregorian calendar (see IsGregorian())
173 //
174 // All data and comments taken verbatim from "The Calendar FAQ (v 2.0)"
175