Chris@16
|
1 #ifndef ISO_FORMAT_HPP___
|
Chris@16
|
2 #define ISO_FORMAT_HPP___
|
Chris@16
|
3
|
Chris@16
|
4 /* Copyright (c) 2002,2003 CrystalClear Software, Inc.
|
Chris@16
|
5 * Use, modification and distribution is subject to the
|
Chris@16
|
6 * Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
7 * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
8 * Author: Jeff Garland, Bart Garst
|
Chris@101
|
9 * $Date$
|
Chris@16
|
10 */
|
Chris@16
|
11
|
Chris@16
|
12 #include "boost/date_time/parse_format_base.hpp"
|
Chris@16
|
13
|
Chris@16
|
14 namespace boost {
|
Chris@16
|
15 namespace date_time {
|
Chris@16
|
16
|
Chris@16
|
17 //! Class to provide common iso formatting spec
|
Chris@16
|
18 template<class charT>
|
Chris@16
|
19 class iso_format_base {
|
Chris@16
|
20 public:
|
Chris@16
|
21 //! Describe month format -- its an integer in iso format
|
Chris@16
|
22 static month_format_spec month_format()
|
Chris@16
|
23 {
|
Chris@16
|
24 return month_as_integer;
|
Chris@16
|
25 }
|
Chris@16
|
26
|
Chris@16
|
27 //! String used printed is date is invalid
|
Chris@16
|
28 static const charT* not_a_date()
|
Chris@16
|
29 {
|
Chris@16
|
30 return "not-a-date-time";
|
Chris@16
|
31 }
|
Chris@16
|
32 //! String used to for positive infinity value
|
Chris@16
|
33 static const charT* pos_infinity()
|
Chris@16
|
34 {
|
Chris@16
|
35 return "+infinity";
|
Chris@16
|
36 }
|
Chris@16
|
37 //! String used to for positive infinity value
|
Chris@16
|
38 static const charT* neg_infinity()
|
Chris@16
|
39 {
|
Chris@16
|
40 return "-infinity";
|
Chris@16
|
41 }
|
Chris@16
|
42
|
Chris@16
|
43 //! ISO char for a year -- used in durations
|
Chris@16
|
44 static charT year_sep_char()
|
Chris@16
|
45 {
|
Chris@16
|
46 return 'Y';
|
Chris@16
|
47 }
|
Chris@16
|
48 //! ISO char for a month
|
Chris@16
|
49 static charT month_sep_char()
|
Chris@16
|
50 {
|
Chris@16
|
51 return '-';
|
Chris@16
|
52 }
|
Chris@16
|
53 //! ISO char for a day
|
Chris@16
|
54 static charT day_sep_char()
|
Chris@16
|
55 {
|
Chris@16
|
56 return '-';
|
Chris@16
|
57 }
|
Chris@16
|
58 //! char for minute
|
Chris@16
|
59 static charT hour_sep_char()
|
Chris@16
|
60 {
|
Chris@16
|
61 return ':';
|
Chris@16
|
62 }
|
Chris@16
|
63 //! char for minute
|
Chris@16
|
64 static charT minute_sep_char()
|
Chris@16
|
65 {
|
Chris@16
|
66 return ':';
|
Chris@16
|
67 }
|
Chris@16
|
68 //! char for second
|
Chris@16
|
69 static charT second_sep_char()
|
Chris@16
|
70 {
|
Chris@16
|
71 return ':';
|
Chris@16
|
72 }
|
Chris@16
|
73 //! ISO char for a period
|
Chris@16
|
74 static charT period_start_char()
|
Chris@16
|
75 {
|
Chris@16
|
76 return 'P';
|
Chris@16
|
77 }
|
Chris@16
|
78 //! Used in time in mixed strings to set start of time
|
Chris@16
|
79 static charT time_start_char()
|
Chris@16
|
80 {
|
Chris@16
|
81 return 'T';
|
Chris@16
|
82 }
|
Chris@16
|
83
|
Chris@16
|
84 //! Used in mixed strings to identify start of a week number
|
Chris@16
|
85 static charT week_start_char()
|
Chris@16
|
86 {
|
Chris@16
|
87 return 'W';
|
Chris@16
|
88 }
|
Chris@16
|
89
|
Chris@16
|
90 //! Separators for periods
|
Chris@16
|
91 static charT period_sep_char()
|
Chris@16
|
92 {
|
Chris@16
|
93 return '/';
|
Chris@16
|
94 }
|
Chris@16
|
95 //! Separator for hh:mm:ss
|
Chris@16
|
96 static charT time_sep_char()
|
Chris@16
|
97 {
|
Chris@16
|
98 return ':';
|
Chris@16
|
99 }
|
Chris@16
|
100 //! Preferred Separator for hh:mm:ss,decimal_fraction
|
Chris@16
|
101 static charT fractional_time_sep_char()
|
Chris@16
|
102 {
|
Chris@16
|
103 return ',';
|
Chris@16
|
104 }
|
Chris@16
|
105
|
Chris@16
|
106 static bool is_component_sep(charT sep)
|
Chris@16
|
107 {
|
Chris@16
|
108 switch(sep) {
|
Chris@16
|
109 case 'H':
|
Chris@16
|
110 case 'M':
|
Chris@16
|
111 case 'S':
|
Chris@16
|
112 case 'W':
|
Chris@16
|
113 case 'T':
|
Chris@16
|
114 case 'Y':
|
Chris@16
|
115 case 'D':return true;
|
Chris@16
|
116 default:
|
Chris@16
|
117 return false;
|
Chris@16
|
118 }
|
Chris@16
|
119 }
|
Chris@16
|
120
|
Chris@16
|
121 static bool is_fractional_time_sep(charT sep)
|
Chris@16
|
122 {
|
Chris@16
|
123 switch(sep) {
|
Chris@16
|
124 case ',':
|
Chris@16
|
125 case '.': return true;
|
Chris@16
|
126 default: return false;
|
Chris@16
|
127 }
|
Chris@16
|
128 }
|
Chris@16
|
129 static bool is_timezone_sep(charT sep)
|
Chris@16
|
130 {
|
Chris@16
|
131 switch(sep) {
|
Chris@16
|
132 case '+':
|
Chris@16
|
133 case '-': return true;
|
Chris@16
|
134 default: return false;
|
Chris@16
|
135 }
|
Chris@16
|
136 }
|
Chris@16
|
137 static charT element_sep_char()
|
Chris@16
|
138 {
|
Chris@16
|
139 return '-';
|
Chris@16
|
140 }
|
Chris@16
|
141
|
Chris@16
|
142 };
|
Chris@16
|
143
|
Chris@16
|
144 #ifndef BOOST_NO_STD_WSTRING
|
Chris@16
|
145
|
Chris@16
|
146 //! Class to provide common iso formatting spec
|
Chris@16
|
147 template<>
|
Chris@16
|
148 class iso_format_base<wchar_t> {
|
Chris@16
|
149 public:
|
Chris@16
|
150 //! Describe month format -- its an integer in iso format
|
Chris@16
|
151 static month_format_spec month_format()
|
Chris@16
|
152 {
|
Chris@16
|
153 return month_as_integer;
|
Chris@16
|
154 }
|
Chris@16
|
155
|
Chris@16
|
156 //! String used printed is date is invalid
|
Chris@16
|
157 static const wchar_t* not_a_date()
|
Chris@16
|
158 {
|
Chris@16
|
159 return L"not-a-date-time";
|
Chris@16
|
160 }
|
Chris@16
|
161 //! String used to for positive infinity value
|
Chris@16
|
162 static const wchar_t* pos_infinity()
|
Chris@16
|
163 {
|
Chris@16
|
164 return L"+infinity";
|
Chris@16
|
165 }
|
Chris@16
|
166 //! String used to for positive infinity value
|
Chris@16
|
167 static const wchar_t* neg_infinity()
|
Chris@16
|
168 {
|
Chris@16
|
169 return L"-infinity";
|
Chris@16
|
170 }
|
Chris@16
|
171
|
Chris@16
|
172 //! ISO char for a year -- used in durations
|
Chris@16
|
173 static wchar_t year_sep_char()
|
Chris@16
|
174 {
|
Chris@16
|
175 return 'Y';
|
Chris@16
|
176 }
|
Chris@16
|
177 //! ISO char for a month
|
Chris@16
|
178 static wchar_t month_sep_char()
|
Chris@16
|
179 {
|
Chris@16
|
180 return '-';
|
Chris@16
|
181 }
|
Chris@16
|
182 //! ISO char for a day
|
Chris@16
|
183 static wchar_t day_sep_char()
|
Chris@16
|
184 {
|
Chris@16
|
185 return '-';
|
Chris@16
|
186 }
|
Chris@16
|
187 //! char for minute
|
Chris@16
|
188 static wchar_t hour_sep_char()
|
Chris@16
|
189 {
|
Chris@16
|
190 return ':';
|
Chris@16
|
191 }
|
Chris@16
|
192 //! char for minute
|
Chris@16
|
193 static wchar_t minute_sep_char()
|
Chris@16
|
194 {
|
Chris@16
|
195 return ':';
|
Chris@16
|
196 }
|
Chris@16
|
197 //! char for second
|
Chris@16
|
198 static wchar_t second_sep_char()
|
Chris@16
|
199 {
|
Chris@16
|
200 return ':';
|
Chris@16
|
201 }
|
Chris@16
|
202 //! ISO char for a period
|
Chris@16
|
203 static wchar_t period_start_char()
|
Chris@16
|
204 {
|
Chris@16
|
205 return 'P';
|
Chris@16
|
206 }
|
Chris@16
|
207 //! Used in time in mixed strings to set start of time
|
Chris@16
|
208 static wchar_t time_start_char()
|
Chris@16
|
209 {
|
Chris@16
|
210 return 'T';
|
Chris@16
|
211 }
|
Chris@16
|
212
|
Chris@16
|
213 //! Used in mixed strings to identify start of a week number
|
Chris@16
|
214 static wchar_t week_start_char()
|
Chris@16
|
215 {
|
Chris@16
|
216 return 'W';
|
Chris@16
|
217 }
|
Chris@16
|
218
|
Chris@16
|
219 //! Separators for periods
|
Chris@16
|
220 static wchar_t period_sep_char()
|
Chris@16
|
221 {
|
Chris@16
|
222 return '/';
|
Chris@16
|
223 }
|
Chris@16
|
224 //! Separator for hh:mm:ss
|
Chris@16
|
225 static wchar_t time_sep_char()
|
Chris@16
|
226 {
|
Chris@16
|
227 return ':';
|
Chris@16
|
228 }
|
Chris@16
|
229 //! Preferred Separator for hh:mm:ss,decimal_fraction
|
Chris@16
|
230 static wchar_t fractional_time_sep_char()
|
Chris@16
|
231 {
|
Chris@16
|
232 return ',';
|
Chris@16
|
233 }
|
Chris@16
|
234
|
Chris@16
|
235 static bool is_component_sep(wchar_t sep)
|
Chris@16
|
236 {
|
Chris@16
|
237 switch(sep) {
|
Chris@16
|
238 case 'H':
|
Chris@16
|
239 case 'M':
|
Chris@16
|
240 case 'S':
|
Chris@16
|
241 case 'W':
|
Chris@16
|
242 case 'T':
|
Chris@16
|
243 case 'Y':
|
Chris@16
|
244 case 'D':return true;
|
Chris@16
|
245 default:
|
Chris@16
|
246 return false;
|
Chris@16
|
247 }
|
Chris@16
|
248 }
|
Chris@16
|
249
|
Chris@16
|
250 static bool is_fractional_time_sep(wchar_t sep)
|
Chris@16
|
251 {
|
Chris@16
|
252 switch(sep) {
|
Chris@16
|
253 case ',':
|
Chris@16
|
254 case '.': return true;
|
Chris@16
|
255 default: return false;
|
Chris@16
|
256 }
|
Chris@16
|
257 }
|
Chris@16
|
258 static bool is_timezone_sep(wchar_t sep)
|
Chris@16
|
259 {
|
Chris@16
|
260 switch(sep) {
|
Chris@16
|
261 case '+':
|
Chris@16
|
262 case '-': return true;
|
Chris@16
|
263 default: return false;
|
Chris@16
|
264 }
|
Chris@16
|
265 }
|
Chris@16
|
266 static wchar_t element_sep_char()
|
Chris@16
|
267 {
|
Chris@16
|
268 return '-';
|
Chris@16
|
269 }
|
Chris@16
|
270
|
Chris@16
|
271 };
|
Chris@16
|
272
|
Chris@16
|
273 #endif // BOOST_NO_STD_WSTRING
|
Chris@16
|
274
|
Chris@16
|
275 //! Format description for iso normal YYYYMMDD
|
Chris@16
|
276 template<class charT>
|
Chris@16
|
277 class iso_format : public iso_format_base<charT> {
|
Chris@16
|
278 public:
|
Chris@16
|
279 //! The ios standard format doesn't use char separators
|
Chris@16
|
280 static bool has_date_sep_chars()
|
Chris@16
|
281 {
|
Chris@16
|
282 return false;
|
Chris@16
|
283 }
|
Chris@16
|
284 };
|
Chris@16
|
285
|
Chris@16
|
286 //! Extended format uses seperators YYYY-MM-DD
|
Chris@16
|
287 template<class charT>
|
Chris@16
|
288 class iso_extended_format : public iso_format_base<charT> {
|
Chris@16
|
289 public:
|
Chris@16
|
290 //! Extended format needs char separators
|
Chris@16
|
291 static bool has_date_sep_chars()
|
Chris@16
|
292 {
|
Chris@16
|
293 return true;
|
Chris@16
|
294 }
|
Chris@16
|
295
|
Chris@16
|
296 };
|
Chris@16
|
297
|
Chris@16
|
298 } } //namespace date_time
|
Chris@16
|
299
|
Chris@16
|
300
|
Chris@16
|
301
|
Chris@16
|
302
|
Chris@16
|
303 #endif
|