Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Side by Side Diff: pkg/intl/lib/src/date_format_field.dart

Issue 11770004: Rename Date to DateTime. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments and keep Backwards-compatibility class Date. Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/intl/lib/intl.dart ('k') | pkg/intl/lib/src/date_format_helpers.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of intl; 5 part of intl;
6 6
7 /** 7 /**
8 * This is a private class internal to DateFormat which is used for formatting 8 * This is a private class internal to DateFormat which is used for formatting
9 * particular fields in a template. e.g. if the format is hh:mm:ss then the 9 * particular fields in a template. e.g. if the format is hh:mm:ss then the
10 * fields would be "hh", ":", "mm", ":", and "ss". Each type of field knows 10 * fields would be "hh", ":", "mm", ":", and "ss". Each type of field knows
(...skipping 12 matching lines...) Expand all
23 * Return the width of [pattern]. Different widths represent different 23 * Return the width of [pattern]. Different widths represent different
24 * formatting options. See the comment for DateFormat for details. 24 * formatting options. See the comment for DateFormat for details.
25 */ 25 */
26 int get width => pattern.length; 26 int get width => pattern.length;
27 27
28 String fullPattern() => pattern; 28 String fullPattern() => pattern;
29 29
30 String toString() => pattern; 30 String toString() => pattern;
31 31
32 /** Format date according to our specification and return the result. */ 32 /** Format date according to our specification and return the result. */
33 String format(Date date) { 33 String format(DateTime date) {
34 // Default implementation in the superclass, works for both types of 34 // Default implementation in the superclass, works for both types of
35 // literal patterns, and is overridden by _DateFormatPatternField. 35 // literal patterns, and is overridden by _DateFormatPatternField.
36 return pattern; 36 return pattern;
37 } 37 }
38 38
39 /** Abstract method for subclasses to implementing parsing for their format.*/ 39 /** Abstract method for subclasses to implementing parsing for their format.*/
40 void parse(_Stream input, _DateBuilder dateFields); 40 void parse(_Stream input, _DateBuilder dateFields);
41 41
42 /** Parse a literal field. We just look for the exact input. */ 42 /** Parse a literal field. We just look for the exact input. */
43 void parseLiteral(_Stream input) { 43 void parseLiteral(_Stream input) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 /* 101 /*
102 * Represents a field in the pattern that formats some aspect of the 102 * Represents a field in the pattern that formats some aspect of the
103 * date. Consists primarily of a switch on the particular pattern characters 103 * date. Consists primarily of a switch on the particular pattern characters
104 * to determine what to do. 104 * to determine what to do.
105 */ 105 */
106 class _DateFormatPatternField extends _DateFormatField { 106 class _DateFormatPatternField extends _DateFormatField {
107 107
108 _DateFormatPatternField(pattern, parent): super(pattern, parent); 108 _DateFormatPatternField(pattern, parent): super(pattern, parent);
109 109
110 /** Format date according to our specification and return the result. */ 110 /** Format date according to our specification and return the result. */
111 String format(Date date) { 111 String format(DateTime date) {
112 return formatField(date); 112 return formatField(date);
113 } 113 }
114 114
115 /** 115 /**
116 * Parse the date according to our specification and put the result 116 * Parse the date according to our specification and put the result
117 * into the correct place in dateFields. 117 * into the correct place in dateFields.
118 */ 118 */
119 void parse(_Stream input, _DateBuilder dateFields) { 119 void parse(_Stream input, _DateBuilder dateFields) {
120 parseField(input, dateFields); 120 parseField(input, dateFields);
121 } 121 }
(...skipping 23 matching lines...) Expand all
145 case 'v': break; // time zone id 145 case 'v': break; // time zone id
146 case 'y': handleNumericField(input, builder.setYear); break; 146 case 'y': handleNumericField(input, builder.setYear); break;
147 case 'z': break; // time zone 147 case 'z': break; // time zone
148 case 'Z': break; // time zone RFC 148 case 'Z': break; // time zone RFC
149 default: return; 149 default: return;
150 } 150 }
151 } catch (e) { throwFormatException(input); } 151 } catch (e) { throwFormatException(input); }
152 } 152 }
153 153
154 /** Formatting logic if we are of type FIELD */ 154 /** Formatting logic if we are of type FIELD */
155 String formatField(Date date) { 155 String formatField(DateTime date) {
156 switch (pattern[0]) { 156 switch (pattern[0]) {
157 case 'a': return formatAmPm(date); 157 case 'a': return formatAmPm(date);
158 case 'c': return formatStandaloneDay(date); 158 case 'c': return formatStandaloneDay(date);
159 case 'd': return formatDayOfMonth(date); 159 case 'd': return formatDayOfMonth(date);
160 case 'E': return formatDayOfWeek(date); 160 case 'E': return formatDayOfWeek(date);
161 case 'G': return formatEra(date); 161 case 'G': return formatEra(date);
162 case 'h': return format1To12Hours(date); 162 case 'h': return format1To12Hours(date);
163 case 'H': return format0To23Hours(date); 163 case 'H': return format0To23Hours(date);
164 case 'K': return format0To11Hours(date); 164 case 'K': return format0To11Hours(date);
165 case 'k': return format24Hours(date); 165 case 'k': return format24Hours(date);
166 case 'L': return formatStandaloneMonth(date); 166 case 'L': return formatStandaloneMonth(date);
167 case 'M': return formatMonth(date); 167 case 'M': return formatMonth(date);
168 case 'm': return formatMinutes(date); 168 case 'm': return formatMinutes(date);
169 case 'Q': return formatQuarter(date); 169 case 'Q': return formatQuarter(date);
170 case 'S': return formatFractionalSeconds(date); 170 case 'S': return formatFractionalSeconds(date);
171 case 's': return formatSeconds(date); 171 case 's': return formatSeconds(date);
172 case 'v': return formatTimeZoneId(date); 172 case 'v': return formatTimeZoneId(date);
173 case 'y': return formatYear(date); 173 case 'y': return formatYear(date);
174 case 'z': return formatTimeZone(date); 174 case 'z': return formatTimeZone(date);
175 case 'Z': return formatTimeZoneRFC(date); 175 case 'Z': return formatTimeZoneRFC(date);
176 default: return ''; 176 default: return '';
177 } 177 }
178 } 178 }
179 179
180 /** Return the symbols for our current locale. */ 180 /** Return the symbols for our current locale. */
181 DateSymbols get symbols => dateTimeSymbols[parent.locale]; 181 DateSymbols get symbols => dateTimeSymbols[parent.locale];
182 182
183 formatEra(Date date) { 183 formatEra(DateTime date) {
184 var era = date.year > 0 ? 1 : 0; 184 var era = date.year > 0 ? 1 : 0;
185 return width >= 4 ? symbols.ERANAMES[era] : 185 return width >= 4 ? symbols.ERANAMES[era] :
186 symbols.ERAS[era]; 186 symbols.ERAS[era];
187 } 187 }
188 188
189 formatYear(Date date) { 189 formatYear(DateTime date) {
190 // TODO(alanknight): Proper handling of years <= 0 190 // TODO(alanknight): Proper handling of years <= 0
191 var year = date.year; 191 var year = date.year;
192 if (year < 0) { 192 if (year < 0) {
193 year = -year; 193 year = -year;
194 } 194 }
195 return width == 2 ? padTo(2, year % 100) : year.toString(); 195 return width == 2 ? padTo(2, year % 100) : year.toString();
196 } 196 }
197 197
198 /** 198 /**
199 * We are given [input] as a stream from which we want to read a date. We 199 * We are given [input] as a stream from which we want to read a date. We
(...skipping 22 matching lines...) Expand all
222 var results = new _Stream(possibilities).findIndexes( 222 var results = new _Stream(possibilities).findIndexes(
223 (each) => input.peek(each.length) == each); 223 (each) => input.peek(each.length) == each);
224 if (results.isEmpty) throwFormatException(input); 224 if (results.isEmpty) throwFormatException(input);
225 results.sort( 225 results.sort(
226 (a, b) => possibilities[a].length.compareTo(possibilities[b].length)); 226 (a, b) => possibilities[a].length.compareTo(possibilities[b].length));
227 var longestResult = results.last; 227 var longestResult = results.last;
228 input.read(possibilities[longestResult].length); 228 input.read(possibilities[longestResult].length);
229 return longestResult; 229 return longestResult;
230 } 230 }
231 231
232 String formatMonth(Date date) { 232 String formatMonth(DateTime date) {
233 switch (width) { 233 switch (width) {
234 case 5: return symbols.NARROWMONTHS[date.month-1]; 234 case 5: return symbols.NARROWMONTHS[date.month-1];
235 case 4: return symbols.MONTHS[date.month-1]; 235 case 4: return symbols.MONTHS[date.month-1];
236 case 3: return symbols.SHORTMONTHS[date.month-1]; 236 case 3: return symbols.SHORTMONTHS[date.month-1];
237 default: 237 default:
238 return padTo(width, date.month); 238 return padTo(width, date.month);
239 } 239 }
240 } 240 }
241 241
242 void parseMonth(input, dateFields) { 242 void parseMonth(input, dateFields) {
243 var possibilities; 243 var possibilities;
244 switch(width) { 244 switch(width) {
245 case 5: possibilities = symbols.NARROWMONTHS; break; 245 case 5: possibilities = symbols.NARROWMONTHS; break;
246 case 4: possibilities = symbols.MONTHS; break; 246 case 4: possibilities = symbols.MONTHS; break;
247 case 3: possibilities = symbols.SHORTMONTHS; break; 247 case 3: possibilities = symbols.SHORTMONTHS; break;
248 default: return handleNumericField(input, dateFields.setMonth); 248 default: return handleNumericField(input, dateFields.setMonth);
249 } 249 }
250 dateFields.month = parseEnumeratedString(input, possibilities) + 1; 250 dateFields.month = parseEnumeratedString(input, possibilities) + 1;
251 } 251 }
252 252
253 String format24Hours(Date date) { 253 String format24Hours(DateTime date) {
254 return padTo(width, date.hour); 254 return padTo(width, date.hour);
255 } 255 }
256 256
257 String formatFractionalSeconds(Date date) { 257 String formatFractionalSeconds(DateTime date) {
258 // Always print at least 3 digits. If the width is greater, append 0s 258 // Always print at least 3 digits. If the width is greater, append 0s
259 var basic = padTo(3, date.millisecond); 259 var basic = padTo(3, date.millisecond);
260 if (width - 3 > 0) { 260 if (width - 3 > 0) {
261 var extra = padTo(width - 3, 0); 261 var extra = padTo(width - 3, 0);
262 return basic.concat(extra); 262 return basic.concat(extra);
263 } else { 263 } else {
264 return basic; 264 return basic;
265 } 265 }
266 } 266 }
267 267
268 String formatAmPm(Date date) { 268 String formatAmPm(DateTime date) {
269 var hours = date.hour; 269 var hours = date.hour;
270 var index = (date.hour >= 12) && (date.hour < 24) ? 1 : 0; 270 var index = (date.hour >= 12) && (date.hour < 24) ? 1 : 0;
271 var ampm = symbols.AMPMS; 271 var ampm = symbols.AMPMS;
272 return ampm[index]; 272 return ampm[index];
273 } 273 }
274 274
275 void parseAmPm(input, dateFields) { 275 void parseAmPm(input, dateFields) {
276 // If we see a "PM" note it in an extra field. 276 // If we see a "PM" note it in an extra field.
277 var ampm = parseEnumeratedString(input, symbols.AMPMS); 277 var ampm = parseEnumeratedString(input, symbols.AMPMS);
278 if (ampm == 1) dateFields.pm = true; 278 if (ampm == 1) dateFields.pm = true;
279 } 279 }
280 280
281 String format1To12Hours(Date date) { 281 String format1To12Hours(DateTime date) {
282 var hours = date.hour; 282 var hours = date.hour;
283 if (date.hour > 12) hours = hours - 12; 283 if (date.hour > 12) hours = hours - 12;
284 if (hours == 0) hours = 12; 284 if (hours == 0) hours = 12;
285 return padTo(width, hours); 285 return padTo(width, hours);
286 } 286 }
287 287
288 void parse1To12Hours(_Stream input, _DateBuilder dateFields) { 288 void parse1To12Hours(_Stream input, _DateBuilder dateFields) {
289 handleNumericField(input, dateFields.setHour); 289 handleNumericField(input, dateFields.setHour);
290 if (dateFields.hour == 12) dateFields.hour = 0; 290 if (dateFields.hour == 12) dateFields.hour = 0;
291 } 291 }
292 292
293 String format0To11Hours(Date date) { 293 String format0To11Hours(DateTime date) {
294 return padTo(width, date.hour % 12); 294 return padTo(width, date.hour % 12);
295 } 295 }
296 296
297 String format0To23Hours(Date date) { 297 String format0To23Hours(DateTime date) {
298 return padTo(width, date.hour); 298 return padTo(width, date.hour);
299 } 299 }
300 300
301 String formatStandaloneDay(Date date) { 301 String formatStandaloneDay(DateTime date) {
302 switch (width) { 302 switch (width) {
303 case 5: return symbols.STANDALONENARROWWEEKDAYS[date.weekday % 7]; 303 case 5: return symbols.STANDALONENARROWWEEKDAYS[date.weekday % 7];
304 case 4: return symbols.STANDALONEWEEKDAYS[date.weekday % 7]; 304 case 4: return symbols.STANDALONEWEEKDAYS[date.weekday % 7];
305 case 3: return symbols.STANDALONESHORTWEEKDAYS[date.weekday % 7]; 305 case 3: return symbols.STANDALONESHORTWEEKDAYS[date.weekday % 7];
306 default: 306 default:
307 return padTo(1, date.day); 307 return padTo(1, date.day);
308 } 308 }
309 } 309 }
310 310
311 void parseStandaloneDay(_Stream input) { 311 void parseStandaloneDay(_Stream input) {
312 // This is ignored, but we still have to skip over it the correct amount. 312 // This is ignored, but we still have to skip over it the correct amount.
313 var possibilities; 313 var possibilities;
314 switch(width) { 314 switch(width) {
315 case 5: possibilities = symbols.STANDALONENARROWWEEKDAYS; break; 315 case 5: possibilities = symbols.STANDALONENARROWWEEKDAYS; break;
316 case 4: possibilities = symbols.STANDALONEWEEKDAYS; break; 316 case 4: possibilities = symbols.STANDALONEWEEKDAYS; break;
317 case 3: possibilities = symbols.STANDALONESHORTWEEKDAYS; break; 317 case 3: possibilities = symbols.STANDALONESHORTWEEKDAYS; break;
318 default: return handleNumericField(input, (x)=>x); 318 default: return handleNumericField(input, (x)=>x);
319 } 319 }
320 parseEnumeratedString(input, possibilities); 320 parseEnumeratedString(input, possibilities);
321 } 321 }
322 322
323 String formatStandaloneMonth(Date date) { 323 String formatStandaloneMonth(DateTime date) {
324 switch (width) { 324 switch (width) {
325 case 5: 325 case 5:
326 return symbols.STANDALONENARROWMONTHS[date.month-1]; 326 return symbols.STANDALONENARROWMONTHS[date.month-1];
327 case 4: 327 case 4:
328 return symbols.STANDALONEMONTHS[date.month-1]; 328 return symbols.STANDALONEMONTHS[date.month-1];
329 case 3: 329 case 3:
330 return symbols.STANDALONESHORTMONTHS[date.month-1]; 330 return symbols.STANDALONESHORTMONTHS[date.month-1];
331 default: 331 default:
332 return padTo(width, date.month); 332 return padTo(width, date.month);
333 } 333 }
334 } 334 }
335 335
336 void parseStandaloneMonth(input, dateFields) { 336 void parseStandaloneMonth(input, dateFields) {
337 var possibilities; 337 var possibilities;
338 switch(width) { 338 switch(width) {
339 case 5: possibilities = symbols.STANDALONENARROWMONTHS; break; 339 case 5: possibilities = symbols.STANDALONENARROWMONTHS; break;
340 case 4: possibilities = symbols.STANDALONEMONTHS; break; 340 case 4: possibilities = symbols.STANDALONEMONTHS; break;
341 case 3: possibilities = symbols.STANDALONESHORTMONTHS; break; 341 case 3: possibilities = symbols.STANDALONESHORTMONTHS; break;
342 default: return handleNumericField(input, dateFields.setMonth); 342 default: return handleNumericField(input, dateFields.setMonth);
343 } 343 }
344 dateFields.month = parseEnumeratedString(input, possibilities) + 1; 344 dateFields.month = parseEnumeratedString(input, possibilities) + 1;
345 } 345 }
346 346
347 String formatQuarter(Date date) { 347 String formatQuarter(DateTime date) {
348 var quarter = (date.month / 3).truncate().toInt(); 348 var quarter = (date.month / 3).truncate().toInt();
349 if (width < 4) { 349 if (width < 4) {
350 return symbols.SHORTQUARTERS[quarter]; 350 return symbols.SHORTQUARTERS[quarter];
351 } else { 351 } else {
352 return symbols.QUARTERS[quarter]; 352 return symbols.QUARTERS[quarter];
353 } 353 }
354 } 354 }
355 String formatDayOfMonth(Date date) { 355 String formatDayOfMonth(DateTime date) {
356 return padTo(width, date.day); 356 return padTo(width, date.day);
357 } 357 }
358 358
359 String formatDayOfWeek(Date date) { 359 String formatDayOfWeek(DateTime date) {
360 // Note that Dart's weekday returns 1 for Monday and 7 for Sunday. 360 // Note that Dart's weekday returns 1 for Monday and 7 for Sunday.
361 return (width >= 4 ? symbols.WEEKDAYS : 361 return (width >= 4 ? symbols.WEEKDAYS :
362 symbols.SHORTWEEKDAYS)[(date.weekday) % 7]; 362 symbols.SHORTWEEKDAYS)[(date.weekday) % 7];
363 } 363 }
364 364
365 void parseDayOfWeek(_Stream input) { 365 void parseDayOfWeek(_Stream input) {
366 // This is IGNORED, but we still have to skip over it the correct amount. 366 // This is IGNORED, but we still have to skip over it the correct amount.
367 var possibilities = width >= 4 ? symbols.WEEKDAYS : symbols.SHORTWEEKDAYS; 367 var possibilities = width >= 4 ? symbols.WEEKDAYS : symbols.SHORTWEEKDAYS;
368 parseEnumeratedString(input, possibilities); 368 parseEnumeratedString(input, possibilities);
369 } 369 }
370 370
371 String formatMinutes(Date date) { 371 String formatMinutes(DateTime date) {
372 return padTo(width, date.minute); 372 return padTo(width, date.minute);
373 } 373 }
374 374
375 String formatSeconds(Date date) { 375 String formatSeconds(DateTime date) {
376 return padTo(width, date.second); 376 return padTo(width, date.second);
377 } 377 }
378 378
379 String formatTimeZoneId(Date date) { 379 String formatTimeZoneId(DateTime date) {
380 // TODO(alanknight): implement time zone support 380 // TODO(alanknight): implement time zone support
381 throw new UnimplementedError(); 381 throw new UnimplementedError();
382 } 382 }
383 383
384 String formatTimeZone(Date date) { 384 String formatTimeZone(DateTime date) {
385 throw new UnimplementedError(); 385 throw new UnimplementedError();
386 } 386 }
387 387
388 String formatTimeZoneRFC(Date date) { 388 String formatTimeZoneRFC(DateTime date) {
389 throw new UnimplementedError(); 389 throw new UnimplementedError();
390 } 390 }
391 391
392 /** 392 /**
393 * Return a string representation of the object padded to the left with 393 * Return a string representation of the object padded to the left with
394 * zeros. Primarily useful for numbers. 394 * zeros. Primarily useful for numbers.
395 */ 395 */
396 String padTo(int width, Object toBePrinted) { 396 String padTo(int width, Object toBePrinted) {
397 var basicString = toBePrinted.toString(); 397 var basicString = toBePrinted.toString();
398 if (basicString.length >= width) return basicString; 398 if (basicString.length >= width) return basicString;
399 var buffer = new StringBuffer(); 399 var buffer = new StringBuffer();
400 for (var i = 0; i < width - basicString.length; i++) { 400 for (var i = 0; i < width - basicString.length; i++) {
401 buffer.add('0'); 401 buffer.add('0');
402 } 402 }
403 buffer.add(basicString); 403 buffer.add(basicString);
404 return buffer.toString(); 404 return buffer.toString();
405 } 405 }
406 } 406 }
OLDNEW
« no previous file with comments | « pkg/intl/lib/intl.dart ('k') | pkg/intl/lib/src/date_format_helpers.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698