ICU 52.1  52.1
smpdtfmt.h
Go to the documentation of this file.
1 /*
2 * Copyright (C) 1997-2013, 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"
38 
40 
41 class DateFormatSymbols;
42 class DateFormat;
43 class MessageFormat;
44 class FieldPositionHandler;
45 class TimeZoneFormat;
46 
706 public:
716  SimpleDateFormat(UErrorCode& status);
717 
729  SimpleDateFormat(const UnicodeString& pattern,
730  UErrorCode& status);
731 
753  SimpleDateFormat(const UnicodeString& pattern,
754  const UnicodeString& override,
755  UErrorCode& status);
756 
769  SimpleDateFormat(const UnicodeString& pattern,
770  const Locale& locale,
771  UErrorCode& status);
772 
794  SimpleDateFormat(const UnicodeString& pattern,
795  const UnicodeString& override,
796  const Locale& locale,
797  UErrorCode& status);
798 
808  SimpleDateFormat(const UnicodeString& pattern,
809  DateFormatSymbols* formatDataToAdopt,
810  UErrorCode& status);
811 
821  SimpleDateFormat(const UnicodeString& pattern,
822  const DateFormatSymbols& formatData,
823  UErrorCode& status);
824 
830 
836 
841  virtual ~SimpleDateFormat();
842 
849  virtual Format* clone(void) const;
850 
858  virtual UBool operator==(const Format& other) const;
859 
860 
861  using DateFormat::format;
862 
879  virtual UnicodeString& format( Calendar& cal,
880  UnicodeString& appendTo,
881  FieldPosition& pos) const;
882 
901  virtual UnicodeString& format( Calendar& cal,
902  UnicodeString& appendTo,
903  FieldPositionIterator* posIter,
904  UErrorCode& status) const;
905 
906  using DateFormat::parse;
907 
934  virtual void parse( const UnicodeString& text,
935  Calendar& cal,
936  ParsePosition& pos) const;
937 
938 
955  virtual void set2DigitYearStart(UDate d, UErrorCode& status);
956 
972  UDate get2DigitYearStart(UErrorCode& status) const;
973 
980  virtual UnicodeString& toPattern(UnicodeString& result) const;
981 
998  virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
999  UErrorCode& status) const;
1000 
1009  virtual void applyPattern(const UnicodeString& pattern);
1010 
1021  virtual void applyLocalizedPattern(const UnicodeString& pattern,
1022  UErrorCode& status);
1023 
1032  virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
1033 
1040  virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
1041 
1047  virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
1048 
1060  static UClassID U_EXPORT2 getStaticClassID(void);
1061 
1073  virtual UClassID getDynamicClassID(void) const;
1074 
1084  virtual void adoptCalendar(Calendar* calendarToAdopt);
1085 
1086  /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
1096  virtual void setContext(UDisplayContext value, UErrorCode& status);
1097 
1098  /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
1109  virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
1110 
1111  /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following methods since they are virtual */
1119  virtual void adoptTimeZoneFormat(TimeZoneFormat* timeZoneFormatToAdopt);
1120 
1126  virtual void setTimeZoneFormat(const TimeZoneFormat& newTimeZoneFormat);
1127 
1133  virtual const TimeZoneFormat* getTimeZoneFormat(void) const;
1134 
1135 #ifndef U_HIDE_INTERNAL_API
1136 
1146  UBool isFieldUnitIgnored(UCalendarDateFields field) const;
1147 
1148 
1160  static UBool isFieldUnitIgnored(const UnicodeString& pattern,
1161  UCalendarDateFields field);
1162 
1171  const Locale& getSmpFmtLocale(void) const;
1172 #endif /* U_HIDE_INTERNAL_API */
1173 
1174 private:
1175  friend class DateFormat;
1176 
1177  void initializeDefaultCentury(void);
1178 
1179  SimpleDateFormat(); // default constructor not implemented
1180 
1189  SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
1190 
1199  SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern
1200 
1204  UnicodeString& _format(Calendar& cal, UnicodeString& appendTo, FieldPositionHandler& handler, UErrorCode& status) const;
1205 
1222  void subFormat(UnicodeString &appendTo,
1223  UChar ch,
1224  int32_t count,
1225  UDisplayContext capitalizationContext,
1226  int32_t fieldNum,
1227  FieldPositionHandler& handler,
1228  Calendar& cal,
1229  UErrorCode& status) const; // in case of illegal argument
1230 
1244  void zeroPaddingNumber(NumberFormat *currentNumberFormat,
1245  UnicodeString &appendTo,
1246  int32_t value,
1247  int32_t minDigits,
1248  int32_t maxDigits) const;
1249 
1254  static UBool isNumeric(UChar formatChar, int32_t count);
1255 
1259  static UBool isAtNumericField(const UnicodeString &pattern, int32_t patternOffset);
1260 
1264  static UBool isAfterNonNumericField(const UnicodeString &pattern, int32_t patternOffset);
1265 
1273  Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
1274 
1281  void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
1282 
1292  void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
1293 
1300  void initialize(const Locale& locale, UErrorCode& status);
1301 
1315  int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
1316  const UnicodeString* stringArray, int32_t stringArrayCount,
1317  const UnicodeString* monthPattern, Calendar& cal) const;
1318 
1331  int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
1332  const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
1333 
1347  static UBool matchLiterals(const UnicodeString &pattern, int32_t &patternOffset,
1348  const UnicodeString &text, int32_t &textOffset, UBool lenient);
1349 
1368  int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
1369  UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], int32_t& saveHebrewMonth, Calendar& cal,
1370  int32_t patLoc, MessageFormat * numericLeapMonthFormatter) const;
1371 
1372  void parseInt(const UnicodeString& text,
1373  Formattable& number,
1374  ParsePosition& pos,
1375  UBool allowNegative,
1376  NumberFormat *fmt) const;
1377 
1378  void parseInt(const UnicodeString& text,
1379  Formattable& number,
1380  int32_t maxDigits,
1381  ParsePosition& pos,
1382  UBool allowNegative,
1383  NumberFormat *fmt) const;
1384 
1385  int32_t checkIntSuffix(const UnicodeString& text, int32_t start,
1386  int32_t patLoc, UBool isNegative) const;
1387 
1400  static void translatePattern(const UnicodeString& originalPattern,
1401  UnicodeString& translatedPattern,
1402  const UnicodeString& from,
1403  const UnicodeString& to,
1404  UErrorCode& status);
1405 
1413  void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
1414 
1424  int32_t compareSimpleAffix(const UnicodeString& affix,
1425  const UnicodeString& input,
1426  int32_t pos) const;
1427 
1432  int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos) const;
1433 
1438  int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos) const;
1439 
1443  void initNumberFormatters(const Locale &locale,UErrorCode &status);
1444 
1448  NumberFormat * getNumberFormatByIndex(UDateFormatField index) const;
1449 
1453  void processOverrideString(const Locale &locale, const UnicodeString &str, int8_t type, UErrorCode &status);
1454 
1458  static const UCalendarDateFields fgPatternIndexToCalendarField[];
1459 
1463  static const UDateFormatField fgPatternIndexToDateFormatField[];
1464 
1468  TimeZoneFormat *tzFormat() const;
1469 
1476  static const int32_t fgCalendarFieldToLevel[];
1477  static const int32_t fgPatternCharToLevel[];
1478 
1482  UnicodeString fPattern;
1483 
1487  UnicodeString fDateOverride;
1488 
1492  UnicodeString fTimeOverride;
1493 
1494 
1498  Locale fLocale;
1499 
1504  DateFormatSymbols* fSymbols; // Owned
1505 
1509  TimeZoneFormat* fTimeZoneFormat;
1510 
1519  UDate fDefaultCenturyStart;
1520 
1524  /*transient*/ int32_t fDefaultCenturyStartYear;
1525 
1526  int32_t tztype; // here to avoid api change
1527 
1528  typedef struct NSOverride {
1529  NumberFormat *nf;
1530  int32_t hash;
1531  NSOverride *next;
1532  } NSOverride;
1533 
1534  NumberFormat **fNumberFormatters;
1535 
1536  NSOverride *fOverrideList;
1537 
1538  UBool fHaveDefaultCentury;
1539 
1540  UDisplayContext fCapitalizationContext;
1541 };
1542 
1543 inline UDate
1544 SimpleDateFormat::get2DigitYearStart(UErrorCode& /*status*/) const
1545 {
1546  return fDefaultCenturyStart;
1547 }
1548 
1550 
1551 #endif /* #if !UCONFIG_NO_FORMATTING */
1552 
1553 #endif // _SMPDTFMT
1554 //eof