ICU 4.2.1
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
datefmt.h
Go to the documentation of this file.
1 /*
2  ********************************************************************************
3  * Copyright (C) 1997-2009, International Business Machines
4  * Corporation and others. All Rights Reserved.
5  ********************************************************************************
6  *
7  * File DATEFMT.H
8  *
9  * Modification History:
10  *
11  * Date Name Description
12  * 02/19/97 aliu Converted from java.
13  * 04/01/97 aliu Added support for centuries.
14  * 07/23/98 stephen JDK 1.2 sync
15  * 11/15/99 weiv Added support for week of year/day of week formatting
16  ********************************************************************************
17  */
18 
19 #ifndef DATEFMT_H
20 #define DATEFMT_H
21 
22 #include "unicode/utypes.h"
23 
24 #if !UCONFIG_NO_FORMATTING
25 
26 #include "unicode/udat.h"
27 #include "unicode/calendar.h"
28 #include "unicode/numfmt.h"
29 #include "unicode/format.h"
30 #include "unicode/locid.h"
31 
38 
39 class TimeZone;
41 
138 class U_I18N_API DateFormat : public Format {
139 public:
140 
148  enum EStyle
149  {
150  kNone = -1,
151 
152  kFull = 0,
153  kLong = 1,
154  kMedium = 2,
155  kShort = 3,
156 
157  kDateOffset = kShort + 1,
158  // kFull + kDateOffset = 4
159  // kLong + kDateOffset = 5
160  // kMedium + kDateOffset = 6
161  // kShort + kDateOffset = 7
162 
163  kDateTime = 8,
164  // Default DateTime
165 
166  kDateTimeOffset = kDateTime + 1,
167  // kFull + kDateTimeOffset = 9
168  // kLong + kDateTimeOffset = 10
169  // kMedium + kDateTimeOffset = 11
170  // kShort + kDateTimeOffset = 12
171 
172  // relative dates
173  kRelative = (1 << 7),
174 
175  kFullRelative = (kFull | kRelative),
176 
177  kLongRelative = kLong | kRelative,
178 
179  kMediumRelative = kMedium | kRelative,
180 
181  kShortRelative = kShort | kRelative,
182 
183 
184  kDefault = kMedium,
185 
186 
187 
192  FULL = kFull,
193  LONG = kLong,
194  MEDIUM = kMedium,
195  SHORT = kShort,
196  DEFAULT = kDefault,
197  DATE_OFFSET = kDateOffset,
198  NONE = kNone,
199  DATE_TIME = kDateTime
200  };
201 
206  virtual ~DateFormat();
207 
212  virtual UBool operator==(const Format&) const;
213 
228  virtual UnicodeString& format(const Formattable& obj,
229  UnicodeString& appendTo,
230  FieldPosition& pos,
231  UErrorCode& status) const;
232 
266  virtual UnicodeString& format( Calendar& cal,
267  UnicodeString& appendTo,
268  FieldPosition& fieldPosition) const = 0;
269 
297  UnicodeString& format( UDate date,
298  UnicodeString& appendTo,
299  FieldPosition& fieldPosition) const;
300 
312  UnicodeString& format(UDate date, UnicodeString& appendTo) const;
313 
324  UnicodeString& format(const Formattable& obj,
325  UnicodeString& appendTo,
326  UErrorCode& status) const;
327 
338  virtual UDate parse( const UnicodeString& text,
339  UErrorCode& status) const;
340 
367  virtual void parse( const UnicodeString& text,
368  Calendar& cal,
369  ParsePosition& pos) const = 0;
370 
390  UDate parse( const UnicodeString& text,
391  ParsePosition& pos) const;
392 
419  virtual void parseObject(const UnicodeString& source,
420  Formattable& result,
421  ParsePosition& parse_pos) const;
422 
430  static DateFormat* U_EXPORT2 createInstance(void);
431 
443  static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
444  const Locale& aLocale = Locale::getDefault());
445 
456  static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
457  const Locale& aLocale = Locale::getDefault());
458 
472  static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
473  EStyle timeStyle = kDefault,
474  const Locale& aLocale = Locale::getDefault());
475 
483  static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
484 
489  virtual UBool isLenient(void) const;
490 
501  virtual void setLenient(UBool lenient);
502 
508  virtual const Calendar* getCalendar(void) const;
509 
519  virtual void adoptCalendar(Calendar* calendarToAdopt);
520 
528  virtual void setCalendar(const Calendar& newCalendar);
529 
530 
537  virtual const NumberFormat* getNumberFormat(void) const;
538 
545  virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
546 
552  virtual void setNumberFormat(const NumberFormat& newNumberFormat);
553 
559  virtual const TimeZone& getTimeZone(void) const;
560 
567  virtual void adoptTimeZone(TimeZone* zoneToAdopt);
568 
574  virtual void setTimeZone(const TimeZone& zone);
575 
576 protected:
583  DateFormat();
584 
589  DateFormat(const DateFormat&);
590 
596 
604 
612 
613 private:
622  static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale&);
623 
624 public:
630  enum EField
631  {
632  // Obsolete; use UDateFormatField instead
633  kEraField = UDAT_ERA_FIELD,
634  kYearField = UDAT_YEAR_FIELD,
635  kMonthField = UDAT_MONTH_FIELD,
636  kDateField = UDAT_DATE_FIELD,
637  kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
638  kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
639  kMinuteField = UDAT_MINUTE_FIELD,
640  kSecondField = UDAT_SECOND_FIELD,
641  kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
642  kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
643  kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
644  kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
645  kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
646  kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
647  kAmPmField = UDAT_AM_PM_FIELD,
648  kHour1Field = UDAT_HOUR1_FIELD,
649  kHour0Field = UDAT_HOUR0_FIELD,
650  kTimezoneField = UDAT_TIMEZONE_FIELD,
651  kYearWOYField = UDAT_YEAR_WOY_FIELD,
652  kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
653  kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
654  kJulianDayField = UDAT_JULIAN_DAY_FIELD,
655  kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
656 
657  // Obsolete; use UDateFormatField instead
658  ERA_FIELD = UDAT_ERA_FIELD,
659  YEAR_FIELD = UDAT_YEAR_FIELD,
660  MONTH_FIELD = UDAT_MONTH_FIELD,
661  DATE_FIELD = UDAT_DATE_FIELD,
662  HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
663  HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
664  MINUTE_FIELD = UDAT_MINUTE_FIELD,
665  SECOND_FIELD = UDAT_SECOND_FIELD,
666  MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
667  DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
668  DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
669  DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
670  WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
671  WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
672  AM_PM_FIELD = UDAT_AM_PM_FIELD,
673  HOUR1_FIELD = UDAT_HOUR1_FIELD,
674  HOUR0_FIELD = UDAT_HOUR0_FIELD,
675  TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
676  };
677 };
678 
679 inline UnicodeString&
681  UnicodeString& appendTo,
682  UErrorCode& status) const {
683  return Format::format(obj, appendTo, status);
684 }
686 
687 #endif /* #if !UCONFIG_NO_FORMATTING */
688 
689 #endif // _DATEFMT
690 //eof
FieldPosition and UFieldPosition selector for &#39;w&#39; field alignment, corresponding to the UCAL_WEEK_OF_...
Definition: udat.h:353
FieldPosition and UFieldPosition selector for &#39;e&#39; field alignment, corresponding to the UCAL_DOW_LOCA...
Definition: udat.h:407
Calendar is an abstract base class for converting between a UDate object and a set of integer fields ...
Definition: calendar.h:165
NumberFormat * fNumberFormat
The number formatter that DateFormat uses to format numbers in dates and times.
Definition: datefmt.h:611
FieldPosition and UFieldPosition selector for &#39;M&#39; field alignment, corresponding to the UCAL_MONTH fi...
Definition: udat.h:279
FieldPosition and UFieldPosition selector for &#39;k&#39; field alignment, corresponding to the UCAL_HOUR_OF_...
Definition: udat.h:295
double UDate
Date and Time data type.
Definition: utypes.h:281
virtual void parseObject(const UnicodeString &source, Formattable &result, ParsePosition &parse_pos) const =0
Parse a string to produce an object.
UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const
Formats an object to produce a string.
Calendar * fCalendar
The calendar that DateFormat uses to produce the time field values needed to implement date/time form...
Definition: datefmt.h:603
DateFormat is an abstract class for a family of classes that convert dates and times from their inter...
Definition: datefmt.h:138
FieldPosition and UFieldPosition selector for &#39;g&#39; field alignment, corresponding to the UCAL_JULIAN_D...
Definition: udat.h:421
FieldPosition and UFieldPosition selector for &#39;D&#39; field alignment, corresponding to the UCAL_DAY_OF_Y...
Definition: udat.h:339
EStyle
Constants for various style patterns.
Definition: datefmt.h:148
C++ API: Base class for all formats.
FieldPosition and UFieldPosition selector for &#39;u&#39; field alignment, corresponding to the UCAL_EXTENDED...
Definition: udat.h:414
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:475
FieldPosition and UFieldPosition selector for &#39;d&#39; field alignment, corresponding to the UCAL_DATE fie...
Definition: udat.h:286
FieldPosition and UFieldPosition selector for &#39;Y&#39; field alignment, corresponding to the UCAL_YEAR_WOY...
Definition: udat.h:400
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:183
FieldPosition and UFieldPosition selector for &#39;F&#39; field alignment, corresponding to the UCAL_DAY_OF_W...
Definition: udat.h:346
Abstract base class for all number formats.
Definition: numfmt.h:162
EField
Field selector for FieldPosition for DateFormat fields.
Definition: datefmt.h:630
FieldPosition and UFieldPosition selector for &#39;A&#39; field alignment, corresponding to the UCAL_MILLISEC...
Definition: udat.h:428
C++ API: Calendar object.
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:47
C API: DateFormat.
FieldPosition and UFieldPosition selector for &#39;W&#39; field alignment, corresponding to the UCAL_WEEK_OF_...
Definition: udat.h:360
virtual UBool operator==(const Format &other) const =0
Return true if the given Format objects are semantically equal.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:187
#define U_EXPORT2
Definition: platform.h:338
FieldPosition and UFieldPosition selector for &#39;E&#39; field alignment, corresponding to the UCAL_DAY_OF_W...
Definition: udat.h:332
FieldPosition and UFieldPosition selector for &#39;a&#39; field alignment, corresponding to the UCAL_AM_PM fi...
Definition: udat.h:367
FieldPosition and UFieldPosition selector for &#39;K&#39; field alignment, corresponding to the UCAL_HOUR fie...
Definition: udat.h:385
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:106
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API If the compiler doesn&#39;t support namespaces...
Definition: uversion.h:184
static const Locale & getDefault(void)
Common methods of getting the current default Locale.
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:47
FieldPosition and UFieldPosition selector for &#39;G&#39; field alignment, corresponding to the UCAL_ERA fiel...
Definition: udat.h:265
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:593
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:122
FieldPosition and UFieldPosition selector for &#39;m&#39; field alignment, corresponding to the UCAL_MINUTE f...
Definition: udat.h:311
C++ API: Locale ID object.
Base class for all formats.
Definition: format.h:93
FieldPosition and UFieldPosition selector for &#39;s&#39; field alignment, corresponding to the UCAL_SECOND f...
Definition: udat.h:318
Basic definitions for ICU, for both C and C++ APIs.
FieldPosition and UFieldPosition selector for &#39;z&#39; field alignment, corresponding to the UCAL_ZONE_OFF...
Definition: udat.h:393
FieldPosition and UFieldPosition selector for &#39;y&#39; field alignment, corresponding to the UCAL_YEAR fie...
Definition: udat.h:272
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format an object to produce a string.
C++ API: Abstract base class for all number formats.
FieldPosition and UFieldPosition selector for &#39;H&#39; field alignment, corresponding to the UCAL_HOUR_OF_...
Definition: udat.h:304
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:181
FieldPosition and UFieldPosition selector for &#39;S&#39; field alignment, corresponding to the UCAL_MILLISEC...
Definition: udat.h:325
FieldPosition and UFieldPosition selector for &#39;h&#39; field alignment, corresponding to the UCAL_HOUR fie...
Definition: udat.h:376
signed int int32_t
Define 64 bit limits.
Definition: pwin32.h:143
This class provides flexible generation of date format patterns, like &quot;yy-MM-dd&quot;. ...
Definition: dtptngen.h:49
int8_t UBool
The ICU boolean type.
Definition: umachine.h:208
Format & operator=(const Format &)