ICU 55.1  55.1
datefmt.h
Go to the documentation of this file.
1 /*
2  ********************************************************************************
3  * Copyright (C) 1997-2015, 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"
33 
40 
41 class TimeZone;
42 class DateTimePatternGenerator;
43 
44 // explicit template instantiation. see digitlst.h
45 #if defined (_MSC_VER)
46 template class U_I18N_API EnumSet<UDateFormatBooleanAttribute,
47  0,
49 #endif
50 
147 class U_I18N_API DateFormat : public Format {
148 public:
149 
157  enum EStyle
158  {
159  kNone = -1,
160 
161  kFull = 0,
162  kLong = 1,
163  kMedium = 2,
164  kShort = 3,
165 
166  kDateOffset = kShort + 1,
167  // kFull + kDateOffset = 4
168  // kLong + kDateOffset = 5
169  // kMedium + kDateOffset = 6
170  // kShort + kDateOffset = 7
171 
172  kDateTime = 8,
173  // Default DateTime
174 
175  kDateTimeOffset = kDateTime + 1,
176  // kFull + kDateTimeOffset = 9
177  // kLong + kDateTimeOffset = 10
178  // kMedium + kDateTimeOffset = 11
179  // kShort + kDateTimeOffset = 12
180 
181  // relative dates
182  kRelative = (1 << 7),
183 
184  kFullRelative = (kFull | kRelative),
185 
186  kLongRelative = kLong | kRelative,
187 
188  kMediumRelative = kMedium | kRelative,
189 
190  kShortRelative = kShort | kRelative,
191 
192 
193  kDefault = kMedium,
194 
195 
196 
201  FULL = kFull,
202  LONG = kLong,
203  MEDIUM = kMedium,
204  SHORT = kShort,
205  DEFAULT = kDefault,
206  DATE_OFFSET = kDateOffset,
207  NONE = kNone,
208  DATE_TIME = kDateTime
209  };
210 
215  virtual ~DateFormat();
216 
221  virtual UBool operator==(const Format&) const;
222 
223 
224  using Format::format;
225 
240  virtual UnicodeString& format(const Formattable& obj,
241  UnicodeString& appendTo,
242  FieldPosition& pos,
243  UErrorCode& status) const;
244 
260  virtual UnicodeString& format(const Formattable& obj,
261  UnicodeString& appendTo,
262  FieldPositionIterator* posIter,
263  UErrorCode& status) const;
297  virtual UnicodeString& format( Calendar& cal,
298  UnicodeString& appendTo,
299  FieldPosition& fieldPosition) const = 0;
300 
319  virtual UnicodeString& format(Calendar& cal,
320  UnicodeString& appendTo,
321  FieldPositionIterator* posIter,
322  UErrorCode& status) const;
350  UnicodeString& format( UDate date,
351  UnicodeString& appendTo,
352  FieldPosition& fieldPosition) const;
353 
367  UnicodeString& format(UDate date,
368  UnicodeString& appendTo,
369  FieldPositionIterator* posIter,
370  UErrorCode& status) const;
382  UnicodeString& format(UDate date, UnicodeString& appendTo) const;
383 
418  virtual UDate parse( const UnicodeString& text,
419  UErrorCode& status) const;
420 
447  virtual void parse( const UnicodeString& text,
448  Calendar& cal,
449  ParsePosition& pos) const = 0;
450 
481  UDate parse( const UnicodeString& text,
482  ParsePosition& pos) const;
483 
507  virtual void parseObject(const UnicodeString& source,
508  Formattable& result,
509  ParsePosition& parse_pos) const;
510 
518  static DateFormat* U_EXPORT2 createInstance(void);
519 
531  static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
532  const Locale& aLocale = Locale::getDefault());
533 
549  static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
550  const Locale& aLocale = Locale::getDefault());
551 
570  static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
571  EStyle timeStyle = kDefault,
572  const Locale& aLocale = Locale::getDefault());
573 
574 #ifndef U_HIDE_DRAFT_API
575 
589  static DateFormat* U_EXPORT2 createInstanceForSkeleton(
590  const UnicodeString& skeleton,
591  UErrorCode &status);
592 
606  static DateFormat* U_EXPORT2 createInstanceForSkeleton(
607  const UnicodeString& skeleton,
608  const Locale &locale,
609  UErrorCode &status);
610 
625  static DateFormat* U_EXPORT2 createInstanceForSkeleton(
626  Calendar *calendarToAdopt,
627  const UnicodeString& skeleton,
628  const Locale &locale,
629  UErrorCode &status);
630 
631 #endif /* U_HIDE_DRAFT_API */
632 
633 #ifndef U_HIDE_INTERNAL_API
634 
660  static DateFormat* U_EXPORT2 internalCreateInstanceForSkeleton(
661  const UnicodeString& skeleton,
662  const Locale &locale,
664  UErrorCode &status);
665 
666 #endif /* U_HIDE_INTERNAL_API */
667 
675  static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
676 
682  virtual UBool isLenient(void) const;
683 
704  virtual void setLenient(UBool lenient);
705 
706 
711  virtual UBool isCalendarLenient(void) const;
712 
713 
723  virtual void setCalendarLenient(UBool lenient);
724 
725 
734  virtual const Calendar* getCalendar(void) const;
735 
745  virtual void adoptCalendar(Calendar* calendarToAdopt);
746 
754  virtual void setCalendar(const Calendar& newCalendar);
755 
756 
763  virtual const NumberFormat* getNumberFormat(void) const;
764 
771  virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
772 
778  virtual void setNumberFormat(const NumberFormat& newNumberFormat);
779 
785  virtual const TimeZone& getTimeZone(void) const;
786 
793  virtual void adoptTimeZone(TimeZone* zoneToAdopt);
794 
800  virtual void setTimeZone(const TimeZone& zone);
801 
811  virtual void setContext(UDisplayContext value, UErrorCode& status);
812 
823  virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
824 
836  virtual DateFormat& U_EXPORT2 setBooleanAttribute(UDateFormatBooleanAttribute attr,
837  UBool newvalue,
838  UErrorCode &status);
839 
849  virtual UBool U_EXPORT2 getBooleanAttribute(UDateFormatBooleanAttribute attr, UErrorCode &status) const;
850 
851 protected:
858  DateFormat();
859 
864  DateFormat(const DateFormat&);
865 
871 
879 
887 
888 
889 private:
898  static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale);
899 
900 
905 
906 
907  UDisplayContext fCapitalizationContext;
908  friend class DateFmtKeyByStyle;
909 
910 public:
911 #ifndef U_HIDE_OBSOLETE_API
912 
917  enum EField
918  {
919  // Obsolete; use UDateFormatField instead
920  kEraField = UDAT_ERA_FIELD,
921  kYearField = UDAT_YEAR_FIELD,
922  kMonthField = UDAT_MONTH_FIELD,
923  kDateField = UDAT_DATE_FIELD,
924  kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
925  kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
926  kMinuteField = UDAT_MINUTE_FIELD,
927  kSecondField = UDAT_SECOND_FIELD,
928  kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
929  kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
930  kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
931  kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
932  kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
933  kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
934  kAmPmField = UDAT_AM_PM_FIELD,
935  kHour1Field = UDAT_HOUR1_FIELD,
936  kHour0Field = UDAT_HOUR0_FIELD,
937  kTimezoneField = UDAT_TIMEZONE_FIELD,
938  kYearWOYField = UDAT_YEAR_WOY_FIELD,
939  kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
940  kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
941  kJulianDayField = UDAT_JULIAN_DAY_FIELD,
942  kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
943 
944  // Obsolete; use UDateFormatField instead
945  ERA_FIELD = UDAT_ERA_FIELD,
946  YEAR_FIELD = UDAT_YEAR_FIELD,
947  MONTH_FIELD = UDAT_MONTH_FIELD,
948  DATE_FIELD = UDAT_DATE_FIELD,
949  HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
950  HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
951  MINUTE_FIELD = UDAT_MINUTE_FIELD,
952  SECOND_FIELD = UDAT_SECOND_FIELD,
953  MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
954  DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
955  DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
956  DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
957  WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
958  WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
959  AM_PM_FIELD = UDAT_AM_PM_FIELD,
960  HOUR1_FIELD = UDAT_HOUR1_FIELD,
961  HOUR0_FIELD = UDAT_HOUR0_FIELD,
962  TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
963  };
964 #endif /* U_HIDE_OBSOLETE_API */
965 };
966 
968 
969 #endif /* #if !UCONFIG_NO_FORMATTING */
970 
971 #endif // _DATEFMT
972 //eof
FieldPosition and UFieldPosition selector for &#39;w&#39; field alignment, corresponding to the UCAL_WEEK_OF_...
Definition: udat.h:590
Base class for all formats.
Definition: format.h:94
FieldPosition and UFieldPosition selector for &#39;e&#39; field alignment, corresponding to the UCAL_DOW_LOCA...
Definition: udat.h:644
FieldPosition and UFieldPosition selector for &#39;M&#39; field alignment, corresponding to the UCAL_MONTH fi...
Definition: udat.h:508
Abstract base class for all number formats.
Definition: numfmt.h:172
FieldPosition and UFieldPosition selector for &#39;k&#39; field alignment, corresponding to the UCAL_HOUR_OF_...
Definition: udat.h:524
Calendar is an abstract base class for converting between a UDate object and a set of integer fields ...
Definition: calendar.h:200
This class provides flexible generation of date format patterns, like "yy-MM-dd". ...
Definition: dtptngen.h:50
UDisplayContext
Display context settings.
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:881
C API: Display context types (enum values)
FieldPosition and UFieldPosition selector for &#39;g&#39; field alignment, corresponding to the UCAL_JULIAN_D...
Definition: udat.h:658
FieldPosition and UFieldPosition selector for &#39;D&#39; field alignment, corresponding to the UCAL_DAY_OF_Y...
Definition: udat.h:576
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:651
EField
Field selector for FieldPosition for DateFormat fields.
Definition: datefmt.h:917
#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 &#39;d&#39; field alignment, corresponding to the UCAL_DATE fie...
Definition: udat.h:515
FieldPosition and UFieldPosition selector for &#39;Y&#39; field alignment, corresponding to the UCAL_YEAR_WOY...
Definition: udat.h:637
#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 &#39;F&#39; field alignment, corresponding to the UCAL_DAY_OF_W...
Definition: udat.h:583
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 &#39;A&#39; field alignment, corresponding to the UCAL_MILLISEC...
Definition: udat.h:665
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:878
FieldPosition and UFieldPosition selector for &#39;W&#39; field alignment, corresponding to the UCAL_WEEK_OF_...
Definition: udat.h:597
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:157
NumberFormat * fNumberFormat
The number formatter that DateFormat uses to format numbers in dates and times.
Definition: datefmt.h:886
FieldPosition and UFieldPosition selector for &#39;E&#39; field alignment, corresponding to the UCAL_DAY_OF_W...
Definition: udat.h:569
FieldPosition and UFieldPosition selector for &#39;a&#39; field alignment, corresponding to the UCAL_AM_PM fi...
Definition: udat.h:604
FieldPosition and UFieldPosition selector for &#39;K&#39; field alignment, corresponding to the UCAL_HOUR fie...
Definition: udat.h:622
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
UDisplayContextType
Display context types, for getting values of a particular setting.
FieldPosition and UFieldPosition selector for &#39;G&#39; field alignment, corresponding to the UCAL_ERA fiel...
Definition: udat.h:494
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 &#39;m&#39; field alignment, corresponding to the UCAL_MINUTE f...
Definition: udat.h:540
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:147
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 &#39;s&#39; field alignment, corresponding to the UCAL_SECOND f...
Definition: udat.h:547
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:630
Format & operator=(const Format &)
FieldPosition and UFieldPosition selector for &#39;y&#39; field alignment, corresponding to the UCAL_YEAR fie...
Definition: udat.h:501
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 &#39;H&#39; field alignment, corresponding to the UCAL_HOUR_OF_...
Definition: udat.h:533
UDateFormatBooleanAttribute
DateFormat boolean attributes.
Definition: udat.h:852
FieldPosition and UFieldPosition selector for &#39;S&#39; field alignment, corresponding to the UCAL_MILLISEC...
Definition: udat.h:562
FieldPosition and UFieldPosition selector for &#39;h&#39; field alignment, corresponding to the UCAL_HOUR fie...
Definition: udat.h:613
int8_t UBool
The ICU boolean type.
Definition: umachine.h:234
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:185