ICU 53.1  53.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
smpdtfmt.h
Go to the documentation of this file.
1 /*
2 * Copyright (C) 1997-2014, 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 #include "unicode/tzfmt.h" /* for UTimeZoneFormatTimeType */
39 #include "unicode/brkiter.h"
40 
42 
43 class DateFormatSymbols;
44 class DateFormat;
45 class MessageFormat;
46 class FieldPositionHandler;
47 class TimeZoneFormat;
48 
708 public:
718  SimpleDateFormat(UErrorCode& status);
719 
731  SimpleDateFormat(const UnicodeString& pattern,
732  UErrorCode& status);
733 
755  SimpleDateFormat(const UnicodeString& pattern,
756  const UnicodeString& override,
757  UErrorCode& status);
758 
771  SimpleDateFormat(const UnicodeString& pattern,
772  const Locale& locale,
773  UErrorCode& status);
774 
796  SimpleDateFormat(const UnicodeString& pattern,
797  const UnicodeString& override,
798  const Locale& locale,
799  UErrorCode& status);
800 
810  SimpleDateFormat(const UnicodeString& pattern,
811  DateFormatSymbols* formatDataToAdopt,
812  UErrorCode& status);
813 
823  SimpleDateFormat(const UnicodeString& pattern,
824  const DateFormatSymbols& formatData,
825  UErrorCode& status);
826 
832 
838 
843  virtual ~SimpleDateFormat();
844 
851  virtual Format* clone(void) const;
852 
860  virtual UBool operator==(const Format& other) const;
861 
862 
863  using DateFormat::format;
864 
881  virtual UnicodeString& format( Calendar& cal,
882  UnicodeString& appendTo,
883  FieldPosition& pos) const;
884 
903  virtual UnicodeString& format( Calendar& cal,
904  UnicodeString& appendTo,
905  FieldPositionIterator* posIter,
906  UErrorCode& status) const;
907 
908  using DateFormat::parse;
909 
936  virtual void parse( const UnicodeString& text,
937  Calendar& cal,
938  ParsePosition& pos) const;
939 
940 
957  virtual void set2DigitYearStart(UDate d, UErrorCode& status);
958 
974  UDate get2DigitYearStart(UErrorCode& status) const;
975 
982  virtual UnicodeString& toPattern(UnicodeString& result) const;
983 
1000  virtual UnicodeString& toLocalizedPattern(UnicodeString& result,
1001  UErrorCode& status) const;
1002 
1011  virtual void applyPattern(const UnicodeString& pattern);
1012 
1023  virtual void applyLocalizedPattern(const UnicodeString& pattern,
1024  UErrorCode& status);
1025 
1034  virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
1035 
1042  virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
1043 
1049  virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
1050 
1062  static UClassID U_EXPORT2 getStaticClassID(void);
1063 
1075  virtual UClassID getDynamicClassID(void) const;
1076 
1086  virtual void adoptCalendar(Calendar* calendarToAdopt);
1087 
1088  /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following methods since they are virtual */
1096  virtual void adoptTimeZoneFormat(TimeZoneFormat* timeZoneFormatToAdopt);
1097 
1103  virtual void setTimeZoneFormat(const TimeZoneFormat& newTimeZoneFormat);
1104 
1110  virtual const TimeZoneFormat* getTimeZoneFormat(void) const;
1111 
1112  /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
1123  virtual void setContext(UDisplayContext value, UErrorCode& status);
1124 
1125 #ifndef U_HIDE_INTERNAL_API
1126 
1136  UBool isFieldUnitIgnored(UCalendarDateFields field) const;
1137 
1138 
1150  static UBool isFieldUnitIgnored(const UnicodeString& pattern,
1151  UCalendarDateFields field);
1152 
1161  const Locale& getSmpFmtLocale(void) const;
1162 #endif /* U_HIDE_INTERNAL_API */
1163 
1164 private:
1165  friend class DateFormat;
1166 
1167  void initializeDefaultCentury(void);
1168 
1169  void initializeBooleanAttributes(void);
1170 
1171  SimpleDateFormat(); // default constructor not implemented
1172 
1181  SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
1182 
1191  SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern
1192 
1196  UnicodeString& _format(Calendar& cal, UnicodeString& appendTo, FieldPositionHandler& handler, UErrorCode& status) const;
1197 
1214  void subFormat(UnicodeString &appendTo,
1215  UChar ch,
1216  int32_t count,
1217  UDisplayContext capitalizationContext,
1218  int32_t fieldNum,
1219  FieldPositionHandler& handler,
1220  Calendar& cal,
1221  UErrorCode& status) const; // in case of illegal argument
1222 
1236  void zeroPaddingNumber(NumberFormat *currentNumberFormat,
1237  UnicodeString &appendTo,
1238  int32_t value,
1239  int32_t minDigits,
1240  int32_t maxDigits) const;
1241 
1246  static UBool isNumeric(UChar formatChar, int32_t count);
1247 
1251  static UBool isAtNumericField(const UnicodeString &pattern, int32_t patternOffset);
1252 
1256  static UBool isAfterNonNumericField(const UnicodeString &pattern, int32_t patternOffset);
1257 
1265  Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
1266 
1273  void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
1274 
1284  void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
1285 
1292  void initialize(const Locale& locale, UErrorCode& status);
1293 
1307  int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
1308  const UnicodeString* stringArray, int32_t stringArrayCount,
1309  const UnicodeString* monthPattern, Calendar& cal) const;
1310 
1323  int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
1324  const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
1325 
1340  static UBool matchLiterals(const UnicodeString &pattern, int32_t &patternOffset,
1341  const UnicodeString &text, int32_t &textOffset,
1342  UBool whitespaceLenient, UBool partialMatchLenient);
1343 
1364  int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
1365  UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], int32_t& saveHebrewMonth, Calendar& cal,
1366  int32_t patLoc, MessageFormat * numericLeapMonthFormatter, UTimeZoneFormatTimeType *tzTimeType) const;
1367 
1368  void parseInt(const UnicodeString& text,
1369  Formattable& number,
1370  ParsePosition& pos,
1371  UBool allowNegative,
1372  NumberFormat *fmt) const;
1373 
1374  void parseInt(const UnicodeString& text,
1375  Formattable& number,
1376  int32_t maxDigits,
1377  ParsePosition& pos,
1378  UBool allowNegative,
1379  NumberFormat *fmt) const;
1380 
1381  int32_t checkIntSuffix(const UnicodeString& text, int32_t start,
1382  int32_t patLoc, UBool isNegative) const;
1383 
1396  static void translatePattern(const UnicodeString& originalPattern,
1397  UnicodeString& translatedPattern,
1398  const UnicodeString& from,
1399  const UnicodeString& to,
1400  UErrorCode& status);
1401 
1409  void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
1410 
1420  int32_t compareSimpleAffix(const UnicodeString& affix,
1421  const UnicodeString& input,
1422  int32_t pos) const;
1423 
1428  int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos) const;
1429 
1434  int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos) const;
1435 
1439  void initNumberFormatters(const Locale &locale,UErrorCode &status);
1440 
1444  NumberFormat * getNumberFormatByIndex(UDateFormatField index) const;
1445 
1449  void processOverrideString(const Locale &locale, const UnicodeString &str, int8_t type, UErrorCode &status);
1450 
1454  static const UCalendarDateFields fgPatternIndexToCalendarField[];
1455 
1459  static const UDateFormatField fgPatternIndexToDateFormatField[];
1460 
1464  TimeZoneFormat *tzFormat() const;
1465 
1472  static const int32_t fgCalendarFieldToLevel[];
1473  static const int32_t fgPatternCharToLevel[];
1474 
1478  UnicodeString fPattern;
1479 
1483  UnicodeString fDateOverride;
1484 
1488  UnicodeString fTimeOverride;
1489 
1490 
1494  Locale fLocale;
1495 
1500  DateFormatSymbols* fSymbols; // Owned
1501 
1505  TimeZoneFormat* fTimeZoneFormat;
1506 
1515  UDate fDefaultCenturyStart;
1516 
1520  /*transient*/ int32_t fDefaultCenturyStartYear;
1521 
1522  typedef struct NSOverride {
1523  NumberFormat *nf;
1524  int32_t hash;
1525  NSOverride *next;
1526  } NSOverride;
1527 
1528  NumberFormat **fNumberFormatters;
1529 
1530  NSOverride *fOverrideList;
1531 
1532  UBool fHaveDefaultCentury;
1533 
1534  BreakIterator* fCapitalizationBrkIter;
1535 };
1536 
1537 inline UDate
1538 SimpleDateFormat::get2DigitYearStart(UErrorCode& /*status*/) const
1539 {
1540  return fDefaultCenturyStart;
1541 }
1542 
1544 
1545 #endif /* #if !UCONFIG_NO_FORMATTING */
1546 
1547 #endif // _SMPDTFMT
1548 //eof
C++ API: Break Iterator.
C++ API: TimeZoneFormat.
Base class for all formats.
Definition: format.h:94
TimeZoneFormat supports time zone display name formatting and parsing.
Definition: tzfmt.h:261
UCalendarDateFields
Possible fields in a UCalendar.
Definition: ucal.h:183
UTimeZoneFormatTimeType
Constants for time types used by TimeZoneFormat APIs for receiving time type (standard time...
Definition: tzfmt.h:202
Abstract base class for all number formats.
Definition: numfmt.h:172
virtual UClassID getDynamicClassID() const
ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class.
DateFormatSymbols is a public class for encapsulating localizable date-time formatting data – includi...
Definition: dtfmtsym.h:79
virtual void setContext(UDisplayContext value, UErrorCode &status)
Set a particular UDisplayContext value in the formatter, such as UDISPCTX_CAPITALIZATION_FOR_STANDALO...
Calendar is an abstract base class for converting between a UDate object and a set of integer fields ...
Definition: calendar.h:200
UDisplayContext
Display context settings.
double UDate
Date and Time data type.
Definition: utypes.h:201
virtual UDate parse(const UnicodeString &text, UErrorCode &status) const
Parse a date/time string.
DateFormat & operator=(const DateFormat &)
Default assignment operator.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:91
virtual Format * clone() const =0
Clone this object polymorphically.
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:129
C API: Display context types (enum values)
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:358
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129
FieldPositionIterator returns the field ids and their start/limit positions generated by a call to Fo...
Definition: fpositer.h:53
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format an object to produce a string.
The BreakIterator class implements methods for finding the location of boundaries in text...
Definition: brkiter.h:100
EStyle
Constants for various style patterns.
Definition: datefmt.h:157
uint16_t UChar
Define UChar to be UCHAR_TYPE, if that is #defined (for example, to char16_t), or wchar_t if that is ...
Definition: umachine.h:278
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
UDateFormatField
FieldPosition and UFieldPosition selectors for format fields defined by DateFormat and UDateFormat...
Definition: udat.h:487
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers...
Definition: utypes.h:476
SimpleDateFormat is a concrete class for formatting and parsing dates in a language-independent manne...
Definition: smpdtfmt.h:707
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition: fieldpos.h:106
C++ API: Abstract class for converting dates.
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
Basic definitions for ICU, for both C and C++ APIs.
virtual UBool operator==(const Format &) const
Equality operator.
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
virtual void adoptCalendar(Calendar *calendarToAdopt)
Set the calendar to be used by this date format.
int8_t UBool
The ICU boolean type.
Definition: umachine.h:200
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:185