1 mike 1.10 //%/////////////////////////////////////////////////////////////////////////////
2 //
3 // Copyright (c) 2000, 2001 The Open group, BMC Software, Tivoli Systems, IBM
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining a copy
6 // of this software and associated documentation files (the "Software"), to
7 // deal in the Software without restriction, including without limitation the
8 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
9 // sell copies of the Software, and to permit persons to whom the Software is
10 // furnished to do so, subject to the following conditions:
11 //
12 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
13 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
14 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
15 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
16 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
17 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
18 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
19 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 //
21 //==============================================================================
22 mike 1.10 //
23 // Author: Mike Brasher (mbrasher@bmc.com)
24 //
|
25 karl 1.12 // Modified By: Karl Schopmeyer(k.schopmeyer@opengroup.org)
|
26 kumpf 1.17 // Sushma Fernandes, Hewlett Packard Company
27 // (sushma_fernandes@hp.com)
28 // Roger Kumpf, Hewlett Packard Company (roger_kumpf@hp.com)
|
29 kumpf 1.14 //
|
30 mike 1.10 //%/////////////////////////////////////////////////////////////////////////////
31
32 #ifndef Pegasus_DateTime_h
33 #define Pegasus_DateTime_h
34
35 #include <Pegasus/Common/Config.h>
36 #include <Pegasus/Common/Array.h>
|
37 mday 1.20 #include <time.h>
|
38 kumpf 1.17 #ifdef PEGASUS_INTERNALONLY
|
39 mike 1.10 #include <iostream>
|
40 kumpf 1.17 #endif
|
41 kumpf 1.14
|
42 mike 1.10 PEGASUS_NAMESPACE_BEGIN
43
|
44 karl 1.16 /* ATTN: P3. KS Several functions should be added to this class for datetime manipulation
|
45 kumpf 1.14 including get and set each subcomponent (year, month, etc), test for equality,
|
46 karl 1.12 create intervals from absolutes, possibly gett current time, Note that
47 the Java rep is probably tostring, not get string,
48 */
49
|
50 mike 1.10 /**
51 The CIMDateTime class represents the CIM datetime data type as a C++ class
52 CIMDateTime. A CIM datetime may contain a date or an interval. CIMDateTime
53 is an intrinsic CIM data type which represents the time as a formated
54 fixedplength string.
55
56 <PRE>
57 A date has the following form:
58 yyyymmddhhmmss.mmmmmmsutc
59
60 Where
61
62 yyyy = year (0-1999)
63 mm = month (1-12)
64 dd = day (1-31)
65 hh = hour (0-23)
66 mm = minute (0-59)
67 ss = second (0-59)
68 mmmmmm = microseconds.
69 s = '+' or '-' to represent the UTC sign.
70 utc = UTC offset (same as GMT offset).
71 mike 1.10
72 An interval has the following form:
73
74 ddddddddhhmmss.mmmmmm:000
75
76 Where
77
78 dddddddd = days
|
79 kumpf 1.13 hh = hours (0-23)
80 mm = minutes (0-59)
81 ss = seconds (0-59)
|
82 mike 1.10 mmmmmm = microseconds
83 </PRE>
84
85 Note that intervals always end in ":000" (this is how they
86 are distinguished from dates).
87
88 Intervals are really durations since they do not specify a start and
89 end time (as one expects when speaking about an interval). It is
90 better to think of an interval as specifying time elapsed since
91 some event.
92
93 CIMDateTime objects are constructed from C character strings or from
94 other CIMDateTime objects. These character strings must be exactly
95 twenty-five characters and conform to one of the forms idententified
96 above.
97
98 CIMDateTime objects which are not explicitly initialized will be
99 implicitly initialized with the null time interval:
100
101 00000000000000.000000:000
102
103 mike 1.10 Instances can be tested for nullness with the isNull() method.
104 */
105 class PEGASUS_COMMON_LINKAGE CIMDateTime
106 {
107 public:
108
|
109 karl 1.12 /** Create a new CIMDateTime object with NULL DateTime definition.
110 */
|
111 mike 1.10 CIMDateTime();
112
|
113 karl 1.12 /** CIMDateTime - Creat a CIM CIMDateTime instance from a string
|
114 mike 1.10 constant representing the CIM DateTime formatted datetime
|
115 karl 1.12 See the class documentation for CIMDateTime for the defintion of the
116 input string for absolute and interval datetime.
|
117 mike 1.10 @param str String object containing the CIM DateTime formatted string
118 */
119 CIMDateTime(const char* str);
120
|
121 karl 1.12 /** CIMDateTime Create a CIMDateTime instance from another
|
122 mike 1.10 CIMDateTime object
123 @param x CIMDateTime object to be copied.
124 */
125 CIMDateTime(const CIMDateTime& x);
126
|
127 karl 1.12 /** DateTime Destructor. */
|
128 kumpf 1.17 ~CIMDateTime();
|
129 mike 1.10
|
130 karl 1.12 /** Assign one DateTime object to another
131 @param - The DateTime Object to assign
132 <pre>
133 CIMDateTime d1;
134 CIMDateTime d2 = "00000000000000.000000:000";
135 d1 = d1;
136 </pre>
|
137 mike 1.10 */
138 CIMDateTime& operator=(const CIMDateTime& x);
139
|
140 karl 1.12 /** CIMDateTime isNull method - Tests for an all zero date time. Note that
141 today this function checks for absolute datetime == zero, not interval.
|
142 mike 1.10 <PRE>
143 CIMDateTime dt;
144 dt.clear();
145 assert(dt.isNull());
146 </PRE>
147 @return This method returns true of the contents are
148 "00000000000000.000000:000". Else it returns false
149 */
150 Boolean isNull() const;
151
|
152 karl 1.12 /** getString - Returns the string representing the DateTime value of the
153 CIMDateTime Object.
154 ATTN: P3 KS. This simply returns a string whether the datetime is a
155 real value or the NULL value. It is up to the user to test. Should
156 this be modified so we do something like an interupt on NULL?
157 */
|
158 mike 1.10 const char* getString() const;
159
160 /** method set - Sets the date time. Creates the CIMDateTime instance from
161 the input string constant which must be
162 in the datetime format.
163
164 <PRE>
165 CIMDateTime dt;
166 dt.set("19991224120000.000000+360");
167 </PRE>
168
169 @return On format error, CIMDateTime set throws the exception
170 BadDateTimeFormat
171 @exception Throws exception BadDateTimeFormat on format error.
172 */
173 void set(const char* str);
174
|
175 karl 1.12 /** clear - Clears the datetime class instance. The date time is set to our
176 defintion of NULL, absolute zero date time.
177 */
|
178 mike 1.10 void clear();
179
|
180 kumpf 1.14 /**
181 Get current time as CIMDateTime. The time returned is always in UTC format.
182
183 @return CIMDateTime Contains the current datetime as a CIMDateTime object.
184
185 Note: Original code was taken from OperationSystem::getLocalDateTime()
186 */
187 static CIMDateTime getCurrentDateTime();
188
189 /**
190 Get the difference between two CIMDateTimes.
191
192 @param startTime Contains the start time.
193
194 @param finishTime Contains the finish time.
195
196 @return difference Difference between the two datetimes in seconds.
197
198 @throws BadFormat
199
200 */
|
201 kumpf 1.15 static Real64 getDifference(CIMDateTime startTime, CIMDateTime finishTime);
|
202 kumpf 1.14
203 /**
204 Checks whether the datetime is an interval.
205
206 @return isInterval True if the datetime is an interval, else false
207 */
208 Boolean isInterval();
209
|
210 kumpf 1.18 //#ifdef PEGASUS_INTERNALONLY
|
211 kumpf 1.17 private:
212 enum { FORMAT_LENGTH = 25 };
|
213 mike 1.10
|
214 kumpf 1.14 //
215 // Length of the string required to store only the date and time without
216 // the UTC sign and UTC offset.
217 // Format is yyyymmddhhmmss.
218 // Note : The size does not include the null byte.
219 //
220 enum { DATE_TIME_LENGTH = 14 };
221
222 //
223 // Length of the string required to store the formatted date and time
224 // Format is yyyy:mm:dd:hh:mm:ss.
225 //
226 enum { FORMATTED_DATE_TIME = 20 };
227
|
228 mike 1.10 Boolean _set(const char* str);
|
229 kumpf 1.14
|
230 mike 1.10 char _rep[FORMAT_LENGTH + 1];
|
231 kumpf 1.14
232 /**
233 This function extracts the different components of the date and time
234 from the string passed and assigns it to the tm structure.
235
236 @param dateTimeStr Contains the string to be assigned.
237
238 @param tm Contains the tm structure to be updated.
239 */
|
240 mday 1.20 static void formatDateTime(char* dateTime, tm* tm);
|
241 kumpf 1.18 //#endif
|
242 kumpf 1.17
243 /** CIMDateTime - ATTN: Friend operator Test for CIMDateTime
244 equality
245 */
246 PEGASUS_COMMON_LINKAGE friend Boolean operator==(
247 const CIMDateTime& x,
248 const CIMDateTime& y);
|
249 mike 1.10 };
250
251 PEGASUS_COMMON_LINKAGE Boolean operator==(
252 const CIMDateTime& x,
253 const CIMDateTime& y);
254
|
255 kumpf 1.17 #ifdef PEGASUS_INTERNALONLY
|
256 mike 1.10 PEGASUS_COMMON_LINKAGE PEGASUS_STD(ostream)& operator<<(
257 PEGASUS_STD(ostream)& os,
258 const CIMDateTime& x);
|
259 kumpf 1.17 #endif
|
260 mike 1.10
261 #define PEGASUS_ARRAY_T CIMDateTime
262 # include "ArrayInter.h"
263 #undef PEGASUS_ARRAY_T
264
265 PEGASUS_NAMESPACE_END
266
267 #endif /* Pegasus_DateTime_h */
|