ICU 49.1.1  49.1.1
smpdtfmt.h
Go to the documentation of this file.
1 /*
2 * Copyright (C) 1997-2012, International Business Machines Corporation and
3 * others. All Rights Reserved.
4 *******************************************************************************
5 *
6 * File SMPDTFMT.H
7 *
8 * Modification History:
9 *
10 * Date Name Description
11 * 02/19/97 aliu Converted from java.
12 * 07/09/97 helena Make ParsePosition into a class.
13 * 07/21/98 stephen Added GMT_PLUS, GMT_MINUS
14 * Changed setTwoDigitStartDate to set2DigitYearStart
15 * Changed getTwoDigitStartDate to get2DigitYearStart
16 * Removed subParseLong
17 * Removed getZoneIndex (added in DateFormatSymbols)
18 * 06/14/99 stephen Removed fgTimeZoneDataSuffix
19 * 10/14/99 aliu Updated class doc to describe 2-digit year parsing
20 * {j28 4182066}.
21 *******************************************************************************
22 */
23 
24 #ifndef SMPDTFMT_H
25 #define SMPDTFMT_H
26 
27 #include "unicode/utypes.h"
28 
34 #if !UCONFIG_NO_FORMATTING
35 
36 #include "unicode/datefmt.h"
37 
39 
40 class DateFormatSymbols;
41 class DateFormat;
42 class MessageFormat;
43 class FieldPositionHandler;
44 class TimeZoneFormat;
45 
226 public:
236  SimpleDateFormat(UErrorCode& status);
237 
249  SimpleDateFormat(const UnicodeString& pattern,
250  UErrorCode& status);
251 
273  SimpleDateFormat(const UnicodeString& pattern,
274  const UnicodeString& override,
275  UErrorCode& status);
276 
289  SimpleDateFormat(const UnicodeString& pattern,
290  const Locale& locale,
291  UErrorCode& status);
292 
314  SimpleDateFormat(const UnicodeString& pattern,
315  const UnicodeString& override,
316  const Locale& locale,
317  UErrorCode& status);
318 
328  SimpleDateFormat(const UnicodeString& pattern,
329  DateFormatSymbols* formatDataToAdopt,
330  UErrorCode& status);
331 
341  SimpleDateFormat(const UnicodeString& pattern,
342  const DateFormatSymbols& formatData,
343  UErrorCode& status);
344 
350 
356 
361  virtual ~SimpleDateFormat();
362 
369  virtual Format* clone(void) const;
370 
378  virtual UBool operator==(const Format& other) const;
379 
380 
381  using DateFormat::format;
382 
399  virtual UnicodeString& format( Calendar& cal,
400  UnicodeString& appendTo,
401  FieldPosition& pos) const;
402 
403 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
428  virtual UnicodeString& format( Calendar& cal,
429  const UDateFormatContextType* types,
430  const UDateFormatContextValue* values,
431  int32_t typesAndValuesCount,
432  UnicodeString& appendTo,
433  FieldPosition& pos) const;
434 
453  virtual UnicodeString& format( Calendar& cal,
454  UnicodeString& appendTo,
455  FieldPositionIterator* posIter,
456  UErrorCode& status) const;
457 
477  virtual UnicodeString& format( const Formattable& obj,
478  UnicodeString& appendTo,
479  FieldPosition& pos,
480  UErrorCode& status) const;
481 
502  virtual UnicodeString& format( const Formattable& obj,
503  UnicodeString& appendTo,
504  FieldPositionIterator* posIter,
505  UErrorCode& status) const;
506 
517  UnicodeString& format(UDate date,
518  UnicodeString& appendTo,
519  FieldPosition& fieldPosition) const;
520 
533  UnicodeString& format(UDate date,
534  UnicodeString& appendTo,
535  FieldPositionIterator* posIter,
536  UErrorCode& status) const;
537 
547  UnicodeString& format(const Formattable& obj,
548  UnicodeString& appendTo,
549  UErrorCode& status) const;
550 
559  UnicodeString& format(UDate date, UnicodeString& appendTo) const;
560 
588  virtual void parse( const UnicodeString& text,
589  Calendar& cal,
590  ParsePosition& pos) const;
591 
622  UDate parse( const UnicodeString& text,
623  ParsePosition& pos) const;
624 
625 
659  virtual UDate parse( const UnicodeString& text,
660  UErrorCode& status) const;
661 
678  virtual void set2DigitYearStart(UDate d, UErrorCode& status);
679 
695  UDate get2DigitYearStart(UErrorCode& status) const;
696 
703  virtual UnicodeString& toPattern(UnicodeString& result) const;
704 
721  virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
722  UErrorCode& status) const;
723 
732  virtual void applyPattern(const UnicodeString& pattern);
733 
744  virtual void applyLocalizedPattern(const UnicodeString& pattern,
745  UErrorCode& status);
746 
755  virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
756 
763  virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
764 
770  virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
771 
783  static UClassID U_EXPORT2 getStaticClassID(void);
784 
796  virtual UClassID getDynamicClassID(void) const;
797 
807  virtual void adoptCalendar(Calendar* calendarToAdopt);
808 
809 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
820  virtual void setDefaultContext(UDateFormatContextType type, UDateFormatContextValue value,
821  UErrorCode& status);
822 
823 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
834  virtual int32_t getDefaultContext(UDateFormatContextType type, UErrorCode& status) const;
835 
836 #ifndef U_HIDE_INTERNAL_API
837 
844  virtual void adoptTimeZoneFormat(TimeZoneFormat* timeZoneFormatToAdopt);
845 
851  virtual void setTimeZoneFormat(const TimeZoneFormat& newTimeZoneFormat);
852 
858  virtual const TimeZoneFormat* getTimeZoneFormat(void) const;
859 #endif /* U_HIDE_INTERNAL_API */
860 
861 #ifndef U_HIDE_INTERNAL_API
862 
872  UBool isFieldUnitIgnored(UCalendarDateFields field) const;
873 
874 
886  static UBool isFieldUnitIgnored(const UnicodeString& pattern,
887  UCalendarDateFields field);
888 
897  const Locale& getSmpFmtLocale(void) const;
898 #endif /* U_HIDE_INTERNAL_API */
899 
900 private:
901  friend class DateFormat;
902 
903  void initializeDefaultCentury(void);
904 
905  SimpleDateFormat(); // default constructor not implemented
906 
915  SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
916 
925  SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern
926 
930  UnicodeString& _format(Calendar& cal, UDateFormatContextValue capitalizationContext,
931  UnicodeString& appendTo, FieldPositionHandler& handler, UErrorCode& status) const;
932 
949  void subFormat(UnicodeString &appendTo,
950  UChar ch,
951  int32_t count,
952  UDateFormatContextValue capitalizationContext,
953  int32_t fieldNum,
954  FieldPositionHandler& handler,
955  Calendar& cal,
956  UErrorCode& status) const; // in case of illegal argument
957 
971  void zeroPaddingNumber(NumberFormat *currentNumberFormat,
972  UnicodeString &appendTo,
973  int32_t value,
974  int32_t minDigits,
975  int32_t maxDigits) const;
976 
981  static UBool isNumeric(UChar formatChar, int32_t count);
982 
990  Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
991 
998  void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
999 
1009  void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
1010 
1017  void initialize(const Locale& locale, UErrorCode& status);
1018 
1032  int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
1033  const UnicodeString* stringArray, int32_t stringArrayCount,
1034  const UnicodeString* monthPattern, Calendar& cal) const;
1035 
1048  int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
1049  const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
1050 
1064  static UBool matchLiterals(const UnicodeString &pattern, int32_t &patternOffset,
1065  const UnicodeString &text, int32_t &textOffset, UBool lenient);
1066 
1085  int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
1086  UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], int32_t& saveHebrewMonth, Calendar& cal,
1087  int32_t patLoc, MessageFormat * numericLeapMonthFormatter) const;
1088 
1089  void parseInt(const UnicodeString& text,
1090  Formattable& number,
1091  ParsePosition& pos,
1092  UBool allowNegative,
1093  NumberFormat *fmt) const;
1094 
1095  void parseInt(const UnicodeString& text,
1096  Formattable& number,
1097  int32_t maxDigits,
1098  ParsePosition& pos,
1099  UBool allowNegative,
1100  NumberFormat *fmt) const;
1101 
1102  int32_t checkIntSuffix(const UnicodeString& text, int32_t start,
1103  int32_t patLoc, UBool isNegative) const;
1104 
1117  static void translatePattern(const UnicodeString& originalPattern,
1118  UnicodeString& translatedPattern,
1119  const UnicodeString& from,
1120  const UnicodeString& to,
1121  UErrorCode& status);
1122 
1130  void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
1131 
1141  int32_t compareSimpleAffix(const UnicodeString& affix,
1142  const UnicodeString& input,
1143  int32_t pos) const;
1144 
1149  int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos) const;
1150 
1155  int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos) const;
1156 
1160  void initNumberFormatters(const Locale &locale,UErrorCode &status);
1161 
1165  NumberFormat * getNumberFormatByIndex(UDateFormatField index) const;
1166 
1170  void processOverrideString(const Locale &locale, const UnicodeString &str, int8_t type, UErrorCode &status);
1171 
1175  static const UCalendarDateFields fgPatternIndexToCalendarField[];
1176 
1180  static const UDateFormatField fgPatternIndexToDateFormatField[];
1181 
1185  TimeZoneFormat *tzFormat() const;
1186 
1193  static const int32_t fgCalendarFieldToLevel[];
1194  static const int32_t fgPatternCharToLevel[];
1195 
1199  UnicodeString fPattern;
1200 
1204  UnicodeString fDateOverride;
1205 
1209  UnicodeString fTimeOverride;
1210 
1211 
1215  Locale fLocale;
1216 
1221  DateFormatSymbols* fSymbols; // Owned
1222 
1226  TimeZoneFormat* fTimeZoneFormat;
1227 
1236  UDate fDefaultCenturyStart;
1237 
1241  /*transient*/ int32_t fDefaultCenturyStartYear;
1242 
1243  int32_t tztype; // here to avoid api change
1244 
1245  typedef struct NSOverride {
1246  NumberFormat *nf;
1247  int32_t hash;
1248  NSOverride *next;
1249  } NSOverride;
1250 
1251  NumberFormat **fNumberFormatters;
1252 
1253  NSOverride *fOverrideList;
1254 
1255  UBool fHaveDefaultCentury;
1256 
1257  UDateFormatContextValue fDefaultCapitalizationContext;
1258 };
1259 
1260 inline UDate
1262 {
1263  return fDefaultCenturyStart;
1264 }
1265 
1266 inline UnicodeString&
1268  UnicodeString& appendTo,
1269  UErrorCode& status) const {
1270  // Don't use Format:: - use immediate base class only,
1271  // in case immediate base modifies behavior later.
1272  return DateFormat::format(obj, appendTo, status);
1273 }
1274 
1275 inline UnicodeString&
1277  UnicodeString& appendTo,
1278  FieldPosition& pos,
1279  UErrorCode& status) const
1280 {
1281  // Don't use Format:: - use immediate base class only,
1282  // in case immediate base modifies behavior later.
1283  return DateFormat::format(obj, appendTo, pos, status);
1284 }
1285 
1286 inline UnicodeString&
1288  UnicodeString& appendTo,
1289  FieldPositionIterator* posIter,
1290  UErrorCode& status) const
1291 {
1292  // Don't use Format:: - use immediate base class only,
1293  // in case immediate base modifies behavior later.
1294  return DateFormat::format(obj, appendTo, posIter, status);
1295 }
1296 
1297 inline UnicodeString&
1299  UnicodeString& appendTo,
1300  FieldPosition& fieldPosition) const {
1301  // Don't use Format:: - use immediate base class only,
1302  // in case immediate base modifies behavior later.
1303  return DateFormat::format(date, appendTo, fieldPosition);
1304 }
1305 
1306 inline UnicodeString&
1308  UnicodeString& appendTo,
1309  FieldPositionIterator* posIter,
1310  UErrorCode& status) const {
1311  // Don't use Format:: - use immediate base class only,
1312  // in case immediate base modifies behavior later.
1313  return DateFormat::format(date, appendTo, posIter, status);
1314 }
1315 
1316 inline UnicodeString&
1318  return DateFormat::format(date, appendTo);
1319 }
1320 
1322 
1323 #endif /* #if !UCONFIG_NO_FORMATTING */
1324 
1325 #endif // _SMPDTFMT
1326 //eof