2 * Copyright 2001-2010 Internet2
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * @file xmltooling/util/DateTime.h
20 * Manipulation of XML date/time data.
23 #ifndef __xmltool_datetime_h__
24 #define __xmltool_datetime_h__
26 #include <xmltooling/base.h>
28 #if defined (_MSC_VER)
29 #pragma warning( push )
30 #pragma warning( disable : 4244 )
34 #include <xercesc/util/XMLDateTime.hpp>
36 #if defined (_MSC_VER)
37 #pragma warning( pop )
43 * Class for manipulating XML date/time information.
45 * This is mostly copied from Xerces-C, but they haven't produced a usable date/time
46 * class, so we had to incorporate a version of it for now. It can't be inherited
47 * since the fields needed are private.
49 class XMLTOOL_API DateTime
54 DateTime(const XMLCh* const);
55 DateTime(time_t epoch, bool duration=false);
56 DateTime(const DateTime&);
57 DateTime& operator=(const DateTime&);
60 void setBuffer(const XMLCh* const);
62 const XMLCh* getRawData() const;
63 const XMLCh* getFormattedString() const;
66 XMLCh* getDateTimeCanonicalRepresentation() const;
67 XMLCh* getTimeCanonicalRepresentation() const;
76 void parseYearMonth();
79 static int compare(const DateTime* const, const DateTime* const);
80 static int compare(const DateTime* const, const DateTime* const, bool);
81 static int compareOrder(const DateTime* const, const DateTime* const);
83 int getYear() const {return fValue[CentYear];}
84 int getMonth() const {return fValue[Month];}
85 int getDay() const {return fValue[Day];}
86 int getHour() const {return fValue[Hour];}
87 int getMinute() const {return fValue[Minute];}
88 int getSecond() const {return fValue[Second];}
89 time_t getEpoch(bool duration=false) const;
100 MiliSecond , //not to be used directly
107 UTC_STD , // set in parse() or normalize()
108 UTC_POS , // set in parse()
109 UTC_NEG // set in parse()
118 static int compareResult(int, int, bool);
119 static void addDuration(DateTime* pDuration, const DateTime* const pBaseDate, int index);
120 static int compareResult(const DateTime* const, const DateTime* const, bool, int);
121 static int getRetVal(int, int);
124 //inline void assertBuffer() const;
125 void copy(const DateTime&);
128 bool isNormalized() const;
133 void getTimeZone(const int);
134 void parseTimeZone();
136 int findUTCSign(const int start);
137 int indexOf(const int start, const int end, const XMLCh ch) const;
138 int parseInt(const int start, const int end) const;
139 int parseIntYear(const int end) const;
140 double parseMiliSecond(const int start, const int end) const;
142 void validateDateTime() const;
144 void fillString(XMLCh*& ptr, valueIndex ind, int expLen) const;
145 int fillYearString(XMLCh*& ptr, valueIndex ind) const;
146 void searchMiliSeconds(XMLCh*& miliStartPtr, XMLCh*& miliEndPtr) const;
148 bool operator==(const DateTime& toCompare) const;
150 static const int DATETIMES[][TOTAL_SIZE];
151 int fValue[TOTAL_SIZE];
152 int fTimeZone[TIMEZONE_ARRAYSIZE];
163 #endif /* __xmltool_datetime_h__ */