ICU 52.1  52.1
datefmt.h
Go to the documentation of this file.
1 /*
2  ********************************************************************************
3  * Copyright (C) 1997-2013, 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 #include "unicode/enumset.h"
32 
39 
40 class TimeZone;
41 class DateTimePatternGenerator;
42 
43 // explicit template instantiation. see digitlst.h
44 #if defined (_MSC_VER)
45 template class U_I18N_API EnumSet<UDateFormatBooleanAttribute,
46  0,
48 #endif
49 
146 class U_I18N_API DateFormat : public Format {
147 public:
148 
156  enum EStyle
157  {
158  kNone = -1,
159 
160  kFull = 0,
161  kLong = 1,
162  kMedium = 2,
163  kShort = 3,
164 
165  kDateOffset = kShort + 1,
166  // kFull + kDateOffset = 4
167  // kLong + kDateOffset = 5
168  // kMedium + kDateOffset = 6
169  // kShort + kDateOffset = 7
170 
171  kDateTime = 8,
172  // Default DateTime
173 
174  kDateTimeOffset = kDateTime + 1,
175  // kFull + kDateTimeOffset = 9
176  // kLong + kDateTimeOffset = 10
177  // kMedium + kDateTimeOffset = 11
178  // kShort + kDateTimeOffset = 12
179 
180  // relative dates
181  kRelative = (1 << 7),
182 
183  kFullRelative = (kFull | kRelative),
184 
185  kLongRelative = kLong | kRelative,
186 
187  kMediumRelative = kMedium | kRelative,
188 
189  kShortRelative = kShort | kRelative,
190 
191 
192  kDefault = kMedium,
193 
194 
195 
200  FULL = kFull,
201  LONG = kLong,
202  MEDIUM = kMedium,
203  SHORT = kShort,
204  DEFAULT = kDefault,
205  DATE_OFFSET = kDateOffset,
206  NONE = kNone,
207  DATE_TIME = kDateTime
208  };
209 
214  virtual ~DateFormat();
215 
220  virtual UBool operator==(const Format&) const;
221 
222 
223  using Format::format;
224 
239  virtual UnicodeString& format(const Formattable& obj,
240  UnicodeString& appendTo,
241  FieldPosition& pos,
242  UErrorCode& status) const;
243 
259  virtual UnicodeString& format(const Formattable& obj,
260  UnicodeString& appendTo,
261  FieldPositionIterator* posIter,
262  UErrorCode& status) const;
296  virtual UnicodeString& format( Calendar& cal,
297  UnicodeString& appendTo,
298  FieldPosition& fieldPosition) const = 0;
299 
318  virtual UnicodeString& format(Calendar& cal,
319  UnicodeString& appendTo,
320  FieldPositionIterator* posIter,
321  UErrorCode& status) const;
349  UnicodeString& format( UDate date,
350  UnicodeString& appendTo,
351  FieldPosition& fieldPosition) const;
352 
366  UnicodeString& format(UDate date,
367  UnicodeString& appendTo,
368  FieldPositionIterator* posIter,
369  UErrorCode& status) const;
381  UnicodeString& format(UDate date, UnicodeString& appendTo) const;
382 
417  virtual UDate parse( const UnicodeString& text,
418  UErrorCode& status) const;
419 
446  virtual void parse( const UnicodeString& text,
447  Calendar& cal,
448  ParsePosition& pos) const = 0;
449 
480  UDate parse( const UnicodeString& text,
481  ParsePosition& pos) const;
482 
506  virtual void parseObject(const UnicodeString& source,
507  Formattable& result,
508  ParsePosition& parse_pos) const;
509 
517  static DateFormat* U_EXPORT2 createInstance(void);
518 
530  static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
531  const Locale& aLocale = Locale::getDefault());
532 
548  static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
549  const Locale& aLocale = Locale::getDefault());
550 
569  static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
570  EStyle timeStyle = kDefault,
571  const Locale& aLocale = Locale::getDefault());
572 
580  static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
581 
586  virtual UBool isLenient(void) const;
587 
601  virtual void setLenient(UBool lenient);
602 
608  virtual const Calendar* getCalendar(void) const;
609 
619  virtual void adoptCalendar(Calendar* calendarToAdopt);
620 
628  virtual void setCalendar(const Calendar& newCalendar);
629 
630 
637  virtual const NumberFormat* getNumberFormat(void) const;
638 
645  virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
646 
652  virtual void setNumberFormat(const NumberFormat& newNumberFormat);
653 
659  virtual const TimeZone& getTimeZone(void) const;
660 
667  virtual void adoptTimeZone(TimeZone* zoneToAdopt);
668 
674  virtual void setTimeZone(const TimeZone& zone);
675 
687  virtual DateFormat& U_EXPORT2 setBooleanAttribute(UDateFormatBooleanAttribute attr,
688  UBool newvalue,
689  UErrorCode &status);
690 
700  virtual UBool U_EXPORT2 getBooleanAttribute(UDateFormatBooleanAttribute attr, UErrorCode &status) const;
701 
702 protected:
709  DateFormat();
710 
715  DateFormat(const DateFormat&);
716 
722 
730 
738 
739 
740 private:
749  static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale);
750 
751 
756 
757 
758 public:
759 #ifndef U_HIDE_OBSOLETE_API
760 
765  enum EField
766  {
767  // Obsolete; use UDateFormatField instead
768  kEraField = UDAT_ERA_FIELD,
769  kYearField = UDAT_YEAR_FIELD,
770  kMonthField = UDAT_MONTH_FIELD,
771  kDateField = UDAT_DATE_FIELD,
772  kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
773  kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
774  kMinuteField = UDAT_MINUTE_FIELD,
775  kSecondField = UDAT_SECOND_FIELD,
776  kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
777  kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
778  kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
779  kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
780  kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
781  kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
782  kAmPmField = UDAT_AM_PM_FIELD,
783  kHour1Field = UDAT_HOUR1_FIELD,
784  kHour0Field = UDAT_HOUR0_FIELD,
785  kTimezoneField = UDAT_TIMEZONE_FIELD,
786  kYearWOYField = UDAT_YEAR_WOY_FIELD,
787  kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
788  kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
789  kJulianDayField = UDAT_JULIAN_DAY_FIELD,
790  kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
791 
792  // Obsolete; use UDateFormatField instead
793  ERA_FIELD = UDAT_ERA_FIELD,
794  YEAR_FIELD = UDAT_YEAR_FIELD,
795  MONTH_FIELD = UDAT_MONTH_FIELD,
796  DATE_FIELD = UDAT_DATE_FIELD,
797  HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
798  HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
799  MINUTE_FIELD = UDAT_MINUTE_FIELD,
800  SECOND_FIELD = UDAT_SECOND_FIELD,
801  MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
802  DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
803  DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
804  DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
805  WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
806  WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
807  AM_PM_FIELD = UDAT_AM_PM_FIELD,
808  HOUR1_FIELD = UDAT_HOUR1_FIELD,
809  HOUR0_FIELD = UDAT_HOUR0_FIELD,
810  TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
811  };
812 #endif /* U_HIDE_OBSOLETE_API */
813 };
814 
816 
817 #endif /* #if !UCONFIG_NO_FORMATTING */
818 
819 #endif // _DATEFMT
820 //eof
FieldPosition and UFieldPosition selector for 'w' field alignment, corresponding to the UCAL_WEEK_OF_...
Definition: udat.h:597
Base class for all formats.
Definition: format.h:94
FieldPosition and UFieldPosition selector for 'e' field alignment, corresponding to the UCAL_DOW_LOCA...
Definition: udat.h:651
FieldPosition and UFieldPosition selector for 'M' field alignment, corresponding to the UCAL_MONTH fi...
Definition: udat.h:515
Abstract base class for all number formats.
Definition: numfmt.h:169
FieldPosition and UFieldPosition selector for 'k' field alignment, corresponding to the UCAL_HOUR_OF_...
Definition: udat.h:531
Calendar is an abstract base class for converting between a UDate object and a set of integer fields ...
Definition: calendar.h:200
double UDate
Date and Time data type.
Definition: utypes.h:201
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:129
count boolean date format constants
Definition: udat.h:858
FieldPosition and UFieldPosition selector for 'g' field alignment, corresponding to the UCAL_JULIAN_D...
Definition: udat.h:665
FieldPosition and UFieldPosition selector for 'D' field alignment, corresponding to the UCAL_DAY_OF_Y...
Definition: udat.h:583
C++ API: Base class for all formats.
FieldPosition and UFieldPosition selector for 'u' field alignment, corresponding to the UCAL_EXTENDED...
Definition: udat.h:658
EField
Field selector for FieldPosition for DateFormat fields.
Definition: datefmt.h:765
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:358
FieldPosition and UFieldPosition selector for 'd' field alignment, corresponding to the UCAL_DATE fie...
Definition: udat.h:522
FieldPosition and UFieldPosition selector for 'Y' field alignment, corresponding to the UCAL_YEAR_WOY...
Definition: udat.h:644
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129
FieldPosition and UFieldPosition selector for 'F' field alignment, corresponding to the UCAL_DAY_OF_W...
Definition: udat.h:590
FieldPositionIterator returns the field ids and their start/limit positions generated by a call to Fo...
Definition: fpositer.h:53
FieldPosition and UFieldPosition selector for 'A' field alignment, corresponding to the UCAL_MILLISEC...
Definition: udat.h:672
C++ API: Calendar object.
C API: DateFormat.
Calendar * fCalendar
The calendar that DateFormat uses to produce the time field values needed to implement date/time form...
Definition: datefmt.h:729
FieldPosition and UFieldPosition selector for 'W' field alignment, corresponding to the UCAL_WEEK_OF_...
Definition: udat.h:604
UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, UErrorCode &status) const
Formats an object to produce a string.
EStyle
Constants for various style patterns.
Definition: datefmt.h:156
NumberFormat * fNumberFormat
The number formatter that DateFormat uses to format numbers in dates and times.
Definition: datefmt.h:737
FieldPosition and UFieldPosition selector for 'E' field alignment, corresponding to the UCAL_DAY_OF_W...
Definition: udat.h:576
FieldPosition and UFieldPosition selector for 'a' field alignment, corresponding to the UCAL_AM_PM fi...
Definition: udat.h:611
FieldPosition and UFieldPosition selector for 'K' field alignment, corresponding to the UCAL_HOUR fie...
Definition: udat.h:629
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
FieldPosition and UFieldPosition selector for 'G' field alignment, corresponding to the UCAL_ERA fiel...
Definition: udat.h:501
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:476
FieldPosition and UFieldPosition selector for 'm' field alignment, corresponding to the UCAL_MINUTE f...
Definition: udat.h:547
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:106
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition: parsepos.h:47
DateFormat is an abstract class for a family of classes that convert dates and times from their inter...
Definition: datefmt.h:146
C++ API: Locale ID object.
virtual UBool operator==(const Format &other) const =0
Return true if the given Format objects are semantically equal.
virtual void parseObject(const UnicodeString &source, Formattable &result, ParsePosition &parse_pos) const =0
Parse a string to produce an object.
FieldPosition and UFieldPosition selector for 's' field alignment, corresponding to the UCAL_SECOND f...
Definition: udat.h:554
Basic definitions for ICU, for both C and C++ APIs.
FieldPosition and UFieldPosition selector for 'z' field alignment, corresponding to the UCAL_ZONE_OFF...
Definition: udat.h:637
Format & operator=(const Format &)
FieldPosition and UFieldPosition selector for 'y' field alignment, corresponding to the UCAL_YEAR fie...
Definition: udat.h:508
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:245
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition: fmtable.h:66
C++: internal template EnumSet<>
C++ API: Abstract base class for all number formats.
FieldPosition and UFieldPosition selector for 'H' field alignment, corresponding to the UCAL_HOUR_OF_...
Definition: udat.h:540
UDateFormatBooleanAttribute
DateFormat boolean attributes.
Definition: udat.h:842
FieldPosition and UFieldPosition selector for 'S' field alignment, corresponding to the UCAL_MILLISEC...
Definition: udat.h:569
FieldPosition and UFieldPosition selector for 'h' field alignment, corresponding to the UCAL_HOUR fie...
Definition: udat.h:620
int8_t UBool
The ICU boolean type.
Definition: umachine.h:200
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:185