ICU 54.1  54.1
 All Data Structures Namespaces 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-2014, 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 
581  static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
582 
588  virtual UBool isLenient(void) const;
589 
610  virtual void setLenient(UBool lenient);
611 
612 
613  /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
618  virtual UBool isCalendarLenient(void) const;
619 
620 
621  /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
631  virtual void setCalendarLenient(UBool lenient);
632 
633 
642  virtual const Calendar* getCalendar(void) const;
643 
653  virtual void adoptCalendar(Calendar* calendarToAdopt);
654 
662  virtual void setCalendar(const Calendar& newCalendar);
663 
664 
671  virtual const NumberFormat* getNumberFormat(void) const;
672 
679  virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
680 
686  virtual void setNumberFormat(const NumberFormat& newNumberFormat);
687 
693  virtual const TimeZone& getTimeZone(void) const;
694 
701  virtual void adoptTimeZone(TimeZone* zoneToAdopt);
702 
708  virtual void setTimeZone(const TimeZone& zone);
709 
710  /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
720  virtual void setContext(UDisplayContext value, UErrorCode& status);
721 
722  /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
733  virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
734 
735  /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
747  virtual DateFormat& U_EXPORT2 setBooleanAttribute(UDateFormatBooleanAttribute attr,
748  UBool newvalue,
749  UErrorCode &status);
750 
751  /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
761  virtual UBool U_EXPORT2 getBooleanAttribute(UDateFormatBooleanAttribute attr, UErrorCode &status) const;
762 
763 protected:
770  DateFormat();
771 
776  DateFormat(const DateFormat&);
777 
783 
791 
799 
800 
801 private:
810  static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale);
811 
812 
817 
818 
819  UDisplayContext fCapitalizationContext;
820 
821 public:
822 #ifndef U_HIDE_OBSOLETE_API
823 
828  enum EField
829  {
830  // Obsolete; use UDateFormatField instead
831  kEraField = UDAT_ERA_FIELD,
832  kYearField = UDAT_YEAR_FIELD,
833  kMonthField = UDAT_MONTH_FIELD,
834  kDateField = UDAT_DATE_FIELD,
835  kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
836  kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
837  kMinuteField = UDAT_MINUTE_FIELD,
838  kSecondField = UDAT_SECOND_FIELD,
839  kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
840  kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
841  kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
842  kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
843  kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
844  kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
845  kAmPmField = UDAT_AM_PM_FIELD,
846  kHour1Field = UDAT_HOUR1_FIELD,
847  kHour0Field = UDAT_HOUR0_FIELD,
848  kTimezoneField = UDAT_TIMEZONE_FIELD,
849  kYearWOYField = UDAT_YEAR_WOY_FIELD,
850  kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
851  kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
852  kJulianDayField = UDAT_JULIAN_DAY_FIELD,
853  kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
854 
855  // Obsolete; use UDateFormatField instead
856  ERA_FIELD = UDAT_ERA_FIELD,
857  YEAR_FIELD = UDAT_YEAR_FIELD,
858  MONTH_FIELD = UDAT_MONTH_FIELD,
859  DATE_FIELD = UDAT_DATE_FIELD,
860  HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
861  HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
862  MINUTE_FIELD = UDAT_MINUTE_FIELD,
863  SECOND_FIELD = UDAT_SECOND_FIELD,
864  MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
865  DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
866  DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
867  DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
868  WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
869  WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
870  AM_PM_FIELD = UDAT_AM_PM_FIELD,
871  HOUR1_FIELD = UDAT_HOUR1_FIELD,
872  HOUR0_FIELD = UDAT_HOUR0_FIELD,
873  TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
874  };
875 #endif /* U_HIDE_OBSOLETE_API */
876 };
877 
879 
880 #endif /* #if !UCONFIG_NO_FORMATTING */
881 
882 #endif // _DATEFMT
883 //eof