ICU 50.2 50.2
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
33
34#if !UCONFIG_NO_FORMATTING
35
36#include "unicode/datefmt.h"
37#include "unicode/udisplaycontext.h"
38
40
42class DateFormat;
43class MessageFormat;
44class FieldPositionHandler;
45class TimeZoneFormat;
46
227class U_I18N_API SimpleDateFormat: public DateFormat {
228public:
239
252 UErrorCode& status);
253
276 const UnicodeString& override,
277 UErrorCode& status);
278
292 const Locale& locale,
293 UErrorCode& status);
294
317 const UnicodeString& override,
318 const Locale& locale,
319 UErrorCode& status);
320
331 DateFormatSymbols* formatDataToAdopt,
332 UErrorCode& status);
333
344 const DateFormatSymbols& formatData,
345 UErrorCode& status);
346
352
358
364
371 virtual Format* clone(void) const;
372
380 virtual UBool operator==(const Format& other) const;
381
382
383 using DateFormat::format;
384
402 UnicodeString& appendTo,
403 FieldPosition& pos) const;
404
424 UnicodeString& appendTo,
425 FieldPositionIterator* posIter,
426 UErrorCode& status) const;
427
447 virtual UnicodeString& format( const Formattable& obj,
448 UnicodeString& appendTo,
449 FieldPosition& pos,
450 UErrorCode& status) const;
451
472 virtual UnicodeString& format( const Formattable& obj,
473 UnicodeString& appendTo,
474 FieldPositionIterator* posIter,
475 UErrorCode& status) const;
476
488 UnicodeString& appendTo,
489 FieldPosition& fieldPosition) const;
490
504 UnicodeString& appendTo,
505 FieldPositionIterator* posIter,
506 UErrorCode& status) const;
507
517 UnicodeString& format(const Formattable& obj,
518 UnicodeString& appendTo,
519 UErrorCode& status) const;
520
529 UnicodeString& format(UDate date, UnicodeString& appendTo) const;
530
557 virtual void parse( const UnicodeString& text,
558 Calendar& cal,
559 ParsePosition& pos) const;
560
592 ParsePosition& pos) const;
593
594
628 virtual UDate parse( const UnicodeString& text,
629 UErrorCode& status) const;
630
647 virtual void set2DigitYearStart(UDate d, UErrorCode& status);
648
664 UDate get2DigitYearStart(UErrorCode& status) const;
665
672 virtual UnicodeString& toPattern(UnicodeString& result) const;
673
691 UErrorCode& status) const;
692
701 virtual void applyPattern(const UnicodeString& pattern);
702
713 virtual void applyLocalizedPattern(const UnicodeString& pattern,
714 UErrorCode& status);
715
724 virtual const DateFormatSymbols* getDateFormatSymbols(void) const;
725
732 virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols);
733
739 virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols);
740
752 static UClassID U_EXPORT2 getStaticClassID(void);
753
765 virtual UClassID getDynamicClassID(void) const;
766
776 virtual void adoptCalendar(Calendar* calendarToAdopt);
777
778 /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following draft method since it is virtual */
788 virtual void setContext(UDisplayContext value, UErrorCode& status);
789
790 /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following draft method since it is virtual */
801 virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode& status) const;
802
803 /* Cannot use #ifndef U_HIDE_INTERNAL_API for the following methods since they are virtual */
811 virtual void adoptTimeZoneFormat(TimeZoneFormat* timeZoneFormatToAdopt);
812
818 virtual void setTimeZoneFormat(const TimeZoneFormat& newTimeZoneFormat);
819
825 virtual const TimeZoneFormat* getTimeZoneFormat(void) const;
826
827#ifndef U_HIDE_INTERNAL_API
839
840
853 UCalendarDateFields field);
854
863 const Locale& getSmpFmtLocale(void) const;
864#endif /* U_HIDE_INTERNAL_API */
865
866private:
867 friend class DateFormat;
868
869 void initializeDefaultCentury(void);
870
871 SimpleDateFormat(); // default constructor not implemented
872
881 SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
882
891 SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern
892
896 UnicodeString& _format(Calendar& cal, UnicodeString& appendTo, FieldPositionHandler& handler, UErrorCode& status) const;
897
914 void subFormat(UnicodeString &appendTo,
915 UChar ch,
916 int32_t count,
917 UDisplayContext capitalizationContext,
918 int32_t fieldNum,
919 FieldPositionHandler& handler,
920 Calendar& cal,
921 UErrorCode& status) const; // in case of illegal argument
922
936 void zeroPaddingNumber(NumberFormat *currentNumberFormat,
937 UnicodeString &appendTo,
938 int32_t value,
939 int32_t minDigits,
940 int32_t maxDigits) const;
941
946 static UBool isNumeric(UChar formatChar, int32_t count);
947
951 static UBool isAtNumericField(const UnicodeString &pattern, int32_t patternOffset);
952
956 static UBool isAfterNonNumericField(const UnicodeString &pattern, int32_t patternOffset);
957
965 Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status);
966
973 void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status);
974
984 void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status);
985
992 void initialize(const Locale& locale, UErrorCode& status);
993
1007 int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
1008 const UnicodeString* stringArray, int32_t stringArrayCount,
1009 const UnicodeString* monthPattern, Calendar& cal) const;
1010
1023 int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field,
1024 const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const;
1025
1039 static UBool matchLiterals(const UnicodeString &pattern, int32_t &patternOffset,
1040 const UnicodeString &text, int32_t &textOffset, UBool lenient);
1041
1060 int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count,
1061 UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], int32_t& saveHebrewMonth, Calendar& cal,
1062 int32_t patLoc, MessageFormat * numericLeapMonthFormatter) const;
1063
1064 void parseInt(const UnicodeString& text,
1065 Formattable& number,
1066 ParsePosition& pos,
1067 UBool allowNegative,
1068 NumberFormat *fmt) const;
1069
1070 void parseInt(const UnicodeString& text,
1071 Formattable& number,
1072 int32_t maxDigits,
1073 ParsePosition& pos,
1074 UBool allowNegative,
1075 NumberFormat *fmt) const;
1076
1077 int32_t checkIntSuffix(const UnicodeString& text, int32_t start,
1078 int32_t patLoc, UBool isNegative) const;
1079
1092 static void translatePattern(const UnicodeString& originalPattern,
1093 UnicodeString& translatedPattern,
1094 const UnicodeString& from,
1095 const UnicodeString& to,
1096 UErrorCode& status);
1097
1105 void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status);
1106
1116 int32_t compareSimpleAffix(const UnicodeString& affix,
1117 const UnicodeString& input,
1118 int32_t pos) const;
1119
1124 int32_t skipPatternWhiteSpace(const UnicodeString& text, int32_t pos) const;
1125
1130 int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos) const;
1131
1135 void initNumberFormatters(const Locale &locale,UErrorCode &status);
1136
1140 NumberFormat * getNumberFormatByIndex(UDateFormatField index) const;
1141
1145 void processOverrideString(const Locale &locale, const UnicodeString &str, int8_t type, UErrorCode &status);
1146
1150 static const UCalendarDateFields fgPatternIndexToCalendarField[];
1151
1155 static const UDateFormatField fgPatternIndexToDateFormatField[];
1156
1160 TimeZoneFormat *tzFormat() const;
1161
1168 static const int32_t fgCalendarFieldToLevel[];
1169 static const int32_t fgPatternCharToLevel[];
1170
1174 UnicodeString fPattern;
1175
1179 UnicodeString fDateOverride;
1180
1184 UnicodeString fTimeOverride;
1185
1186
1190 Locale fLocale;
1191
1196 DateFormatSymbols* fSymbols; // Owned
1197
1201 TimeZoneFormat* fTimeZoneFormat;
1202
1211 UDate fDefaultCenturyStart;
1212
1216 /*transient*/ int32_t fDefaultCenturyStartYear;
1217
1218 int32_t tztype; // here to avoid api change
1219
1220 typedef struct NSOverride {
1221 NumberFormat *nf;
1222 int32_t hash;
1223 NSOverride *next;
1224 } NSOverride;
1225
1226 NumberFormat **fNumberFormatters;
1227
1228 NSOverride *fOverrideList;
1229
1230 UBool fHaveDefaultCentury;
1231
1232 UDisplayContext fCapitalizationContext;
1233};
1234
1235inline UDate
1237{
1238 return fDefaultCenturyStart;
1239}
1240
1241inline UnicodeString&
1243 UnicodeString& appendTo,
1244 UErrorCode& status) const {
1245 // Don't use Format:: - use immediate base class only,
1246 // in case immediate base modifies behavior later.
1247 return DateFormat::format(obj, appendTo, status);
1248}
1249
1250inline UnicodeString&
1252 UnicodeString& appendTo,
1253 FieldPosition& pos,
1254 UErrorCode& status) const
1255{
1256 // Don't use Format:: - use immediate base class only,
1257 // in case immediate base modifies behavior later.
1258 return DateFormat::format(obj, appendTo, pos, status);
1259}
1260
1261inline UnicodeString&
1263 UnicodeString& appendTo,
1264 FieldPositionIterator* posIter,
1265 UErrorCode& status) const
1266{
1267 // Don't use Format:: - use immediate base class only,
1268 // in case immediate base modifies behavior later.
1269 return DateFormat::format(obj, appendTo, posIter, status);
1270}
1271
1272inline UnicodeString&
1274 UnicodeString& appendTo,
1275 FieldPosition& fieldPosition) const {
1276 // Don't use Format:: - use immediate base class only,
1277 // in case immediate base modifies behavior later.
1278 return DateFormat::format(date, appendTo, fieldPosition);
1279}
1280
1281inline UnicodeString&
1283 UnicodeString& appendTo,
1284 FieldPositionIterator* posIter,
1285 UErrorCode& status) const {
1286 // Don't use Format:: - use immediate base class only,
1287 // in case immediate base modifies behavior later.
1288 return DateFormat::format(date, appendTo, posIter, status);
1289}
1290
1291inline UnicodeString&
1293 return DateFormat::format(date, appendTo);
1294}
1295
1297
1298#endif /* #if !UCONFIG_NO_FORMATTING */
1299
1300#endif // _SMPDTFMT
1301//eof
Calendar is an abstract base class for converting between a UDate object and a set of integer fields ...
Definition calendar.h:200
DateFormatSymbols is a public class for encapsulating localizable date-time formatting data – includi...
Definition dtfmtsym.h:79
DateFormat is an abstract class for a family of classes that convert dates and times from their inter...
Definition datefmt.h:138
virtual UnicodeString & format(const Formattable &obj, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const
Format an object to produce a string.
EStyle
Constants for various style patterns.
Definition datefmt.h:149
FieldPositionIterator returns the field ids and their start/limit positions generated by a call to Fo...
Definition fpositer.h:53
FieldPosition is a simple class used by Format and its subclasses to identify fields in formatted out...
Definition fieldpos.h:106
Format()
Default constructor for subclass use only.
Formattable objects can be passed to the Format class or its subclasses for formatting.
Definition fmtable.h:62
A Locale object represents a specific geographical, political, or cultural region.
Definition locid.h:182
Abstract base class for all number formats.
Definition numfmt.h:166
ParsePosition is a simple class used by Format and its subclasses to keep track of the current positi...
Definition parsepos.h:47
virtual UDate parse(const UnicodeString &text, UErrorCode &status) const
Parse a date/time string.
SimpleDateFormat(const UnicodeString &pattern, const UnicodeString &override, UErrorCode &status)
Construct a SimpleDateFormat using the given pattern, numbering system override, and the default loca...
static UClassID getStaticClassID(void)
Return the class ID for this class.
static UBool isFieldUnitIgnored(const UnicodeString &pattern, UCalendarDateFields field)
This is for ICU internal use only.
virtual void setContext(UDisplayContext value, UErrorCode &status)
Set a particular UDisplayContext value in the formatter, such as UDISPCTX_CAPITALIZATION_FOR_STANDALO...
SimpleDateFormat & operator=(const SimpleDateFormat &)
Assignment operator.
virtual UnicodeString & format(Calendar &cal, UnicodeString &appendTo, FieldPosition &pos) const
Format a date or time, which is the standard millis since 24:00 GMT, Jan 1, 1970.
virtual const TimeZoneFormat * getTimeZoneFormat(void) const
Gets the time zone format object associated with this date/time formatter.
virtual void setTimeZoneFormat(const TimeZoneFormat &newTimeZoneFormat)
Sets the TimeZoneFormat to be used by this date/time formatter.
SimpleDateFormat(const UnicodeString &pattern, const UnicodeString &override, const Locale &locale, UErrorCode &status)
Construct a SimpleDateFormat using the given pattern, numbering system override, and locale.
virtual Format * clone(void) const
Clone this Format object polymorphically.
virtual void adoptCalendar(Calendar *calendarToAdopt)
Set the calendar to be used by this date format.
SimpleDateFormat(const UnicodeString &pattern, const DateFormatSymbols &formatData, UErrorCode &status)
Construct a SimpleDateFormat using the given pattern and locale-specific symbol data.
SimpleDateFormat(const UnicodeString &pattern, DateFormatSymbols *formatDataToAdopt, UErrorCode &status)
Construct a SimpleDateFormat using the given pattern and locale-specific symbol data.
virtual UDisplayContext getContext(UDisplayContextType type, UErrorCode &status) const
Get the formatter's UDisplayContext value for the specified UDisplayContextType, such as UDISPCTX_TYP...
virtual UClassID getDynamicClassID(void) const
Returns a unique class ID POLYMORPHICALLY.
virtual void setDateFormatSymbols(const DateFormatSymbols &newFormatSymbols)
Set the date/time formatting data.
virtual UnicodeString & toLocalizedPattern(UnicodeString &result, UErrorCode &status) const
Return a localized pattern string describing this date format.
SimpleDateFormat(UErrorCode &status)
Construct a SimpleDateFormat using the default pattern for the default locale.
virtual UnicodeString & format(Calendar &cal, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const
Format a date or time, which is the standard millis since 24:00 GMT, Jan 1, 1970.
virtual void applyLocalizedPattern(const UnicodeString &pattern, UErrorCode &status)
Apply the given localized pattern string to this date format.
UDate parse(const UnicodeString &text, ParsePosition &pos) const
Parse a date/time string starting at the given parse position.
virtual void set2DigitYearStart(UDate d, UErrorCode &status)
Set the start UDate used to interpret two-digit year strings.
const Locale & getSmpFmtLocale(void) const
This is for ICU internal use only.
SimpleDateFormat(const UnicodeString &pattern, const Locale &locale, UErrorCode &status)
Construct a SimpleDateFormat using the given pattern and locale.
UDate get2DigitYearStart(UErrorCode &status) const
Get the start UDate used to interpret two-digit year strings.
Definition smpdtfmt.h:1236
virtual UBool operator==(const Format &other) const
Return true if the given Format objects are semantically equal.
virtual void applyPattern(const UnicodeString &pattern)
Apply the given unlocalized pattern string to this date format.
virtual void adoptDateFormatSymbols(DateFormatSymbols *newFormatSymbols)
Set the date/time formatting symbols.
virtual UnicodeString & toPattern(UnicodeString &result) const
Return a pattern string describing this date format.
virtual const DateFormatSymbols * getDateFormatSymbols(void) const
Gets the date/time formatting symbols (this is an object carrying the various strings and other symbo...
virtual void parse(const UnicodeString &text, Calendar &cal, ParsePosition &pos) const
Parse a date/time string beginning at the given parse position.
UBool isFieldUnitIgnored(UCalendarDateFields field) const
This is for ICU internal use only.
virtual ~SimpleDateFormat()
Destructor.
SimpleDateFormat(const SimpleDateFormat &)
Copy constructor.
SimpleDateFormat(const UnicodeString &pattern, UErrorCode &status)
Construct a SimpleDateFormat using the given pattern and the default locale.
virtual void adoptTimeZoneFormat(TimeZoneFormat *timeZoneFormatToAdopt)
Sets the TimeZoneFormat to be used by this date/time formatter.
TimeZoneFormat supports time zone display name formatting and parsing.
Definition tzfmt.h:164
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition timezone.h:129
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition unistr.h:247
C++ API: Abstract class for converting dates.
UCalendarDateFields
Possible fields in a UCalendar.
Definition ucal.h:183
UDateFormatField
FieldPosition and UFieldPosition selectors for format fields defined by DateFormat and UDateFormat.
Definition udat.h:473
int8_t UBool
The ICU boolean type.
Definition umachine.h:200
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
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition uobject.h:96
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers,...
Definition utypes.h:476
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition utypes.h:358
double UDate
Date and Time data type.
Definition utypes.h:201
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition uversion.h:130
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition uversion.h:129