ICU 51.2  51.2
datefmt.h
Go to the documentation of this file.
1 /*
2  ********************************************************************************
3  * Copyright (C) 1997-2012, 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;
40 class DateTimePatternGenerator;
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 
214 
215  using Format::format;
216 
231  virtual UnicodeString& format(const Formattable& obj,
232  UnicodeString& appendTo,
233  FieldPosition& pos,
234  UErrorCode& status) const;
235 
251  virtual UnicodeString& format(const Formattable& obj,
252  UnicodeString& appendTo,
253  FieldPositionIterator* posIter,
254  UErrorCode& status) const;
288  virtual UnicodeString& format( Calendar& cal,
289  UnicodeString& appendTo,
290  FieldPosition& fieldPosition) const = 0;
291 
310  virtual UnicodeString& format(Calendar& cal,
311  UnicodeString& appendTo,
312  FieldPositionIterator* posIter,
313  UErrorCode& status) const;
341  UnicodeString& format( UDate date,
342  UnicodeString& appendTo,
343  FieldPosition& fieldPosition) const;
344 
358  UnicodeString& format(UDate date,
359  UnicodeString& appendTo,
360  FieldPositionIterator* posIter,
361  UErrorCode& status) const;
373  UnicodeString& format(UDate date, UnicodeString& appendTo) const;
374 
385  UnicodeString& format(const Formattable& obj,
386  UnicodeString& appendTo,
387  UErrorCode& status) const;
388 
423  virtual UDate parse( const UnicodeString& text,
424  UErrorCode& status) const;
425 
452  virtual void parse( const UnicodeString& text,
453  Calendar& cal,
454  ParsePosition& pos) const = 0;
455 
486  UDate parse( const UnicodeString& text,
487  ParsePosition& pos) const;
488 
512  virtual void parseObject(const UnicodeString& source,
513  Formattable& result,
514  ParsePosition& parse_pos) const;
515 
523  static DateFormat* U_EXPORT2 createInstance(void);
524 
536  static DateFormat* U_EXPORT2 createTimeInstance(EStyle style = kDefault,
537  const Locale& aLocale = Locale::getDefault());
538 
554  static DateFormat* U_EXPORT2 createDateInstance(EStyle style = kDefault,
555  const Locale& aLocale = Locale::getDefault());
556 
575  static DateFormat* U_EXPORT2 createDateTimeInstance(EStyle dateStyle = kDefault,
576  EStyle timeStyle = kDefault,
577  const Locale& aLocale = Locale::getDefault());
578 
586  static const Locale* U_EXPORT2 getAvailableLocales(int32_t& count);
587 
592  virtual UBool isLenient(void) const;
593 
604  virtual void setLenient(UBool lenient);
605 
611  virtual const Calendar* getCalendar(void) const;
612 
622  virtual void adoptCalendar(Calendar* calendarToAdopt);
623 
631  virtual void setCalendar(const Calendar& newCalendar);
632 
633 
640  virtual const NumberFormat* getNumberFormat(void) const;
641 
648  virtual void adoptNumberFormat(NumberFormat* formatToAdopt);
649 
655  virtual void setNumberFormat(const NumberFormat& newNumberFormat);
656 
662  virtual const TimeZone& getTimeZone(void) const;
663 
670  virtual void adoptTimeZone(TimeZone* zoneToAdopt);
671 
677  virtual void setTimeZone(const TimeZone& zone);
678 
679 protected:
686  DateFormat();
687 
692  DateFormat(const DateFormat&);
693 
699 
707 
715 
716 private:
725  static DateFormat* U_EXPORT2 create(EStyle timeStyle, EStyle dateStyle, const Locale& inLocale);
726 
727 public:
728 #ifndef U_HIDE_OBSOLETE_API
729 
734  enum EField
735  {
736  // Obsolete; use UDateFormatField instead
737  kEraField = UDAT_ERA_FIELD,
738  kYearField = UDAT_YEAR_FIELD,
739  kMonthField = UDAT_MONTH_FIELD,
740  kDateField = UDAT_DATE_FIELD,
741  kHourOfDay1Field = UDAT_HOUR_OF_DAY1_FIELD,
742  kHourOfDay0Field = UDAT_HOUR_OF_DAY0_FIELD,
743  kMinuteField = UDAT_MINUTE_FIELD,
744  kSecondField = UDAT_SECOND_FIELD,
745  kMillisecondField = UDAT_FRACTIONAL_SECOND_FIELD,
746  kDayOfWeekField = UDAT_DAY_OF_WEEK_FIELD,
747  kDayOfYearField = UDAT_DAY_OF_YEAR_FIELD,
748  kDayOfWeekInMonthField = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
749  kWeekOfYearField = UDAT_WEEK_OF_YEAR_FIELD,
750  kWeekOfMonthField = UDAT_WEEK_OF_MONTH_FIELD,
751  kAmPmField = UDAT_AM_PM_FIELD,
752  kHour1Field = UDAT_HOUR1_FIELD,
753  kHour0Field = UDAT_HOUR0_FIELD,
754  kTimezoneField = UDAT_TIMEZONE_FIELD,
755  kYearWOYField = UDAT_YEAR_WOY_FIELD,
756  kDOWLocalField = UDAT_DOW_LOCAL_FIELD,
757  kExtendedYearField = UDAT_EXTENDED_YEAR_FIELD,
758  kJulianDayField = UDAT_JULIAN_DAY_FIELD,
759  kMillisecondsInDayField = UDAT_MILLISECONDS_IN_DAY_FIELD,
760 
761  // Obsolete; use UDateFormatField instead
762  ERA_FIELD = UDAT_ERA_FIELD,
763  YEAR_FIELD = UDAT_YEAR_FIELD,
764  MONTH_FIELD = UDAT_MONTH_FIELD,
765  DATE_FIELD = UDAT_DATE_FIELD,
766  HOUR_OF_DAY1_FIELD = UDAT_HOUR_OF_DAY1_FIELD,
767  HOUR_OF_DAY0_FIELD = UDAT_HOUR_OF_DAY0_FIELD,
768  MINUTE_FIELD = UDAT_MINUTE_FIELD,
769  SECOND_FIELD = UDAT_SECOND_FIELD,
770  MILLISECOND_FIELD = UDAT_FRACTIONAL_SECOND_FIELD,
771  DAY_OF_WEEK_FIELD = UDAT_DAY_OF_WEEK_FIELD,
772  DAY_OF_YEAR_FIELD = UDAT_DAY_OF_YEAR_FIELD,
773  DAY_OF_WEEK_IN_MONTH_FIELD = UDAT_DAY_OF_WEEK_IN_MONTH_FIELD,
774  WEEK_OF_YEAR_FIELD = UDAT_WEEK_OF_YEAR_FIELD,
775  WEEK_OF_MONTH_FIELD = UDAT_WEEK_OF_MONTH_FIELD,
776  AM_PM_FIELD = UDAT_AM_PM_FIELD,
777  HOUR1_FIELD = UDAT_HOUR1_FIELD,
778  HOUR0_FIELD = UDAT_HOUR0_FIELD,
779  TIMEZONE_FIELD = UDAT_TIMEZONE_FIELD
780  };
781 #endif /* U_HIDE_OBSOLETE_API */
782 };
783 
784 inline UnicodeString&
785 DateFormat::format(const Formattable& obj,
786  UnicodeString& appendTo,
787  UErrorCode& status) const {
788  return Format::format(obj, appendTo, status);
789 }
791 
792 #endif /* #if !UCONFIG_NO_FORMATTING */
793 
794 #endif // _DATEFMT
795 //eof