class DateFormat
Defined at line 156 of file ../../third_party/icu/default/source/i18n/unicode/datefmt.h
DateFormat is an abstract class for a family of classes that convert dates and
times from their internal representations to textual form and back again in a
language-independent manner. Converting from the internal representation (milliseconds
since midnight, January 1, 1970) to text is known as "formatting," and converting
from text to millis is known as "parsing." We currently define only one concrete
subclass of DateFormat: SimpleDateFormat, which can handle pretty much all normal
date formatting and parsing actions.
<P
>
DateFormat helps you to format and parse dates for any locale. Your code can
be completely independent of the locale conventions for months, days of the
week, or even the calendar format: lunar vs. solar.
<P
>
To format a date for the current Locale, use one of the static factory
methods:
If you are formatting multiple numbers, it is more efficient to get the
format and use it multiple times so that the system doesn't have to fetch the
information about the local language and country conventions multiple times.
To get specific fields of a date, you can use UFieldPosition to
get specific fields.
To format a date for a different Locale, specify it in the call to
createDateInstance().
You can use a DateFormat to parse also.
Use createDateInstance() to produce the normal date format for that country.
There are other static factory methods available. Use createTimeInstance()
to produce the normal time format for that country. Use createDateTimeInstance()
to produce a DateFormat that formats both date and time. You can pass in
different options to these factory methods to control the length of the
result; from SHORT to MEDIUM to LONG to FULL. The exact result depends on the
locale, but generally:
SHORT is completely numeric, such as 12/13/52 or 3:30pm
MEDIUM is longer, such as Jan 12, 1952
LONG is longer, such as January 12, 1952 or 3:30:32pm
FULL is pretty completely specified, such as
Tuesday, April 12, 1952 AD or 3:30:42pm PST.
You can also set the time zone on the format if you wish. If you want even
more control over the format or parsing, (or want to give your users more
control), you can try casting the DateFormat you get from the factory methods
to a SimpleDateFormat. This will work for the majority of countries; just
remember to check getDynamicClassID() before carrying out the cast.
<P
>
You can also use forms of the parse and format methods with ParsePosition and
FieldPosition to allow you to
Progressively parse through pieces of a string.
Align any particular field, or find out where it is for selection
on the screen.
User subclasses are not supported.
While clients may write
subclasses, such code will not necessarily work and will not be
guaranteed to work stably from release to release.
Code
DateFormat* dfmt = DateFormat::createDateInstance();
UDate myDate = Calendar::getNow();
UnicodeString myString;
myString = dfmt->format( myDate, myString );
DateFormat* df = DateFormat::createDateInstance();
UnicodeString myString;
UDate myDateArr[] = { 0.0, 100000000.0, 2000000000.0 }; // test values
for (int32_t i = 0; i < 3; ++i) {
myString.remove();
cout << df->format( myDateArr[i], myString ) << endl;
}
DateFormat* dfmt = DateFormat::createDateInstance();
FieldPosition pos(DateFormat::YEAR_FIELD);
UnicodeString myString;
myString = dfmt->format( myDate, myString );
cout << myString << endl;
cout << pos.getBeginIndex() << "," << pos. getEndIndex() << endl;
DateFormat* df =
DateFormat::createDateInstance( DateFormat::SHORT, Locale::getFrance());
UErrorCode status = U_ZERO_ERROR;
UDate myDate = df->parse(myString, status);
Protected Members
Calendar * fCalendar
NumberFormat * fNumberFormat
Public Methods
void ~DateFormat ()
Destructor.
ICU 2.0
DateFormat * clone ()
Clones this object polymorphically.
The caller owns the result and should delete it when done.
Returns
clone, or nullptr if an error occurred
ICU 2.0
bool operator== (const Format & )
Equality operator. Returns true if the two formats have the same behavior.
ICU 2.0
UnicodeString & format (const Formattable & obj, UnicodeString & appendTo, FieldPosition & pos, UErrorCode & status)
Format an object to produce a string. This method handles Formattable
objects with a UDate type. If a the Formattable object type is not a Date,
then it returns a failing UErrorCode.
Parameters
Returns
Reference to 'appendTo' parameter.
ICU 2.0
UnicodeString & format (const Formattable & obj, UnicodeString & appendTo, FieldPositionIterator * posIter, UErrorCode & status)
Format an object to produce a string. This method handles Formattable
objects with a UDate type. If a the Formattable object type is not a Date,
then it returns a failing UErrorCode.
Parameters
Returns
Reference to 'appendTo' parameter.
ICU 4.4
UnicodeString & format (Calendar & cal, UnicodeString & appendTo, FieldPosition & fieldPosition)
Formats a date into a date/time string. This is an abstract method which
concrete subclasses must implement.
<P
>
On input, the FieldPosition parameter may have its "field" member filled with
an enum value specifying a field. On output, the FieldPosition will be filled
in with the text offsets for that field.
<P
> For example, given a time text
"1996.07.10 AD at 15:08:56 PDT", if the given fieldPosition.field is
UDAT_YEAR_FIELD, the offsets fieldPosition.beginIndex and
statfieldPositionus.getEndIndex will be set to 0 and 4, respectively.
<P
> Notice
that if the same time field appears more than once in a pattern, the status will
be set for the first occurrence of that time field. For instance,
formatting a UDate to the time string "1 PM PDT (Pacific Daylight Time)"
using the pattern "h a z (zzzz)" and the alignment field
DateFormat::TIMEZONE_FIELD, the offsets fieldPosition.beginIndex and
fieldPosition.getEndIndex will be set to 5 and 8, respectively, for the first
occurrence of the timezone pattern character 'z'.
Parameters
Returns
Reference to 'appendTo' parameter.
ICU 2.1
UnicodeString & format (Calendar & cal, UnicodeString & appendTo, FieldPositionIterator * posIter, UErrorCode & status)
Formats a date into a date/time string. Subclasses should implement this method.
Parameters
Returns
Reference to 'appendTo' parameter.
ICU 4.4
UnicodeString & format (UDate date, UnicodeString & appendTo, FieldPosition & fieldPosition)
Formats a UDate into a date/time string.
<P
>
On input, the FieldPosition parameter may have its "field" member filled with
an enum value specifying a field. On output, the FieldPosition will be filled
in with the text offsets for that field.
<P
> For example, given a time text
"1996.07.10 AD at 15:08:56 PDT", if the given fieldPosition.field is
UDAT_YEAR_FIELD, the offsets fieldPosition.beginIndex and
statfieldPositionus.getEndIndex will be set to 0 and 4, respectively.
<P
> Notice
that if the same time field appears more than once in a pattern, the status will
be set for the first occurrence of that time field. For instance,
formatting a UDate to the time string "1 PM PDT (Pacific Daylight Time)"
using the pattern "h a z (zzzz)" and the alignment field
DateFormat::TIMEZONE_FIELD, the offsets fieldPosition.beginIndex and
fieldPosition.getEndIndex will be set to 5 and 8, respectively, for the first
occurrence of the timezone pattern character 'z'.
Parameters
Returns
Reference to 'appendTo' parameter.
ICU 2.0
UnicodeString & format (UDate date, UnicodeString & appendTo, FieldPositionIterator * posIter, UErrorCode & status)
Formats a UDate into a date/time string.
Parameters
Returns
Reference to 'appendTo' parameter.
ICU 4.4
UnicodeString & format (UDate date, UnicodeString & appendTo)
Formats a UDate into a date/time string. If there is a problem, you won't
know, using this method. Use the overloaded format() method which takes a
FieldPosition
&
to detect formatting problems.
Parameters
Returns
Reference to 'appendTo' parameter.
ICU 2.0
UDate parse (const UnicodeString & text, UErrorCode & status)
Parse a date/time string. For example, a time text "07/10/96 4:5 PM, PDT"
will be parsed into a UDate that is equivalent to Date(837039928046).
Parsing begins at the beginning of the string and proceeds as far as
possible. Assuming no parse errors were encountered, this function
doesn't return any information about how much of the string was consumed
by the parsing. If you need that information, use the version of
parse() that takes a ParsePosition.
<P
>
By default, parsing is lenient: If the input is not in the form used by
this object's format method but can still be parsed as a date, then the
parse succeeds. Clients may insist on strict adherence to the format by
calling setLenient(false).
Parameters
Returns
The parsed UDate value, if successful.
ICU 2.0
void parse (const UnicodeString & text, Calendar & cal, ParsePosition & pos)
Parse a date/time string beginning at the given parse position. For
example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date
that is equivalent to Date(837039928046).
<P
>
By default, parsing is lenient: If the input is not in the form used by
this object's format method but can still be parsed as a date, then the
parse succeeds. Clients may insist on strict adherence to the format by
calling setLenient(false).
Parameters
UDate parse (const UnicodeString & text, ParsePosition & pos)
Parse a date/time string beginning at the given parse position. For
example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date
that is equivalent to Date(837039928046).
<P
>
By default, parsing is lenient: If the input is not in the form used by
this object's format method but can still be parsed as a date, then the
parse succeeds. Clients may insist on strict adherence to the format by
calling setLenient(false).
Parameters
Returns
A valid UDate if the input could be parsed.
ICU 2.0
void parseObject (const UnicodeString & source, Formattable & result, ParsePosition & parse_pos)
Parse a string to produce an object. This methods handles parsing of
date/time strings into Formattable objects with UDate types.
<P
>
Before calling, set parse_pos.index to the offset you want to start
parsing at in the source. After calling, parse_pos.index is the end of
the text you parsed. If error occurs, index is unchanged.
<P
>
When parsing, leading whitespace is discarded (with a successful parse),
while trailing whitespace is left as is.
<P
>
See Format::parseObject() for more.
Parameters
DateFormat * createInstance ()
Create a default date/time formatter that uses the SHORT style for both
the date and the time.
Returns
A date/time formatter which the caller owns.
ICU 2.0
DateFormat * createTimeInstance (EStyle style, const Locale & aLocale)
Creates a time formatter with the given formatting style for the given
locale.
Parameters
Returns
A time formatter which the caller owns.
ICU 2.0
DateFormat * createDateInstance (EStyle style, const Locale & aLocale)
Creates a date formatter with the given formatting style for the given
const locale.
Parameters
Returns
A date formatter which the caller owns.
ICU 2.0
DateFormat * createDateTimeInstance (EStyle dateStyle, EStyle timeStyle, const Locale & aLocale)
Creates a date/time formatter with the given formatting styles for the
given locale.
Parameters
Returns
A date/time formatter which the caller owns.
ICU 2.0
UnicodeString getBestPattern (const Locale & locale, const UnicodeString & skeleton, UErrorCode & status)
Returns the best pattern given a skeleton and locale.
Parameters
Returns
the best pattern.
DateFormat * createInstanceForSkeleton (const UnicodeString & skeleton, UErrorCode & status)
Creates a date/time formatter for the given skeleton and
default locale.
Parameters
Returns
A date/time formatter which the caller owns.
ICU 55
DateFormat * createInstanceForSkeleton (const UnicodeString & skeleton, const Locale & locale, UErrorCode & status)
Creates a date/time formatter for the given skeleton and locale.
Parameters
Returns
A date/time formatter which the caller owns.
ICU 55
DateFormat * createInstanceForSkeleton (Calendar * calendarToAdopt, const UnicodeString & skeleton, const Locale & locale, UErrorCode & status)
Creates a date/time formatter for the given skeleton and locale.
Parameters
Returns
A date/time formatter which the caller owns.
ICU 55
const Locale * getAvailableLocales (int32_t & count)
Gets the set of locales for which DateFormats are installed.
Parameters
Returns
the set of locales for which DateFormats are installed. The caller
does NOT own this list and must not delete it.
ICU 2.0
UBool isLenient ()
Returns whether both date/time parsing in the encapsulated Calendar object and DateFormat whitespace
&
numeric processing is lenient.
ICU 2.0
void setLenient (UBool lenient)
Specifies whether date/time parsing is to be lenient. With
lenient parsing, the parser may use heuristics to interpret inputs that
do not precisely match this object's format. Without lenient parsing,
inputs must match this object's format more closely.
Note: ICU 53 introduced finer grained control of leniency (and added
new control points) making the preferred method a combination of
setCalendarLenient()
&
setBooleanAttribute() calls.
This method supports prior functionality but may not support all
future leniency control
&
behavior of DateFormat. For control of pre 53 leniency,
Calendar and DateFormat whitespace
&
numeric tolerance, this method is safe to
use. However, mixing leniency control via this method and modification of the
newer attributes via setBooleanAttribute() may produce undesirable
results.
Parameters
UBool isCalendarLenient ()
Returns whether date/time parsing in the encapsulated Calendar object processing is lenient.
ICU 53
void setCalendarLenient (UBool lenient)
Specifies whether encapsulated Calendar date/time parsing is to be lenient. With
lenient parsing, the parser may use heuristics to interpret inputs that
do not precisely match this object's format. Without lenient parsing,
inputs must match this object's format more closely.
Parameters
const Calendar * getCalendar ()
Gets the calendar associated with this date/time formatter.
The calendar is owned by the formatter and must not be modified.
Also, the calendar does not reflect the results of a parse operation.
To parse to a calendar, use {
void adoptCalendar (Calendar * calendarToAdopt)
Set the calendar to be used by this date format. Initially, the default
calendar for the specified or default locale is used. The caller should
not delete the Calendar object after it is adopted by this call.
Adopting a new calendar will change to the default symbols.
Parameters
void setCalendar (const Calendar & newCalendar)
Set the calendar to be used by this date format. Initially, the default
calendar for the specified or default locale is used.
Parameters
const NumberFormat * getNumberFormat ()
Gets the number formatter which this date/time formatter uses to format
and parse the numeric portions of the pattern.
Returns
the number formatter which this date/time formatter uses.
ICU 2.0
void adoptNumberFormat (NumberFormat * formatToAdopt)
Allows you to set the number formatter. The caller should
not delete the NumberFormat object after it is adopted by this call.
Parameters
void setNumberFormat (const NumberFormat & newNumberFormat)
Allows you to set the number formatter.
Parameters
const TimeZone & getTimeZone ()
Returns a reference to the TimeZone used by this DateFormat's calendar.
Returns
the time zone associated with the calendar of DateFormat.
ICU 2.0
void adoptTimeZone (TimeZone * zoneToAdopt)
Sets the time zone for the calendar of this DateFormat object. The caller
no longer owns the TimeZone object and should not delete it after this call.
Parameters
void setTimeZone (const TimeZone & zone)
Sets the time zone for the calendar of this DateFormat object.
Parameters
void setContext (UDisplayContext value, UErrorCode & status)
Set a particular UDisplayContext value in the formatter, such as
UDISPCTX_CAPITALIZATION_FOR_STANDALONE.
Parameters
UDisplayContext getContext (UDisplayContextType type, UErrorCode & status)
Get the formatter's UDisplayContext value for the specified UDisplayContextType,
such as UDISPCTX_TYPE_CAPITALIZATION.
Parameters
Returns
The UDisplayContextValue for the specified type.
ICU 53
DateFormat & setBooleanAttribute (UDateFormatBooleanAttribute attr, UBool newvalue, UErrorCode & status)
Sets an boolean attribute on this DateFormat.
May return U_UNSUPPORTED_ERROR if this instance does not support
the specified attribute.
Parameters
Returns
*this - for chaining (example: format.setAttribute(...).setAttribute(...) )
ICU 53
UBool getBooleanAttribute (UDateFormatBooleanAttribute attr, UErrorCode & status)
Returns a boolean from this DateFormat
May return U_UNSUPPORTED_ERROR if this instance does not support
the specified attribute.
Parameters
Returns
the attribute value. Undefined if there is an error.
ICU 53
Protected Methods
void DateFormat ()
Default constructor. Creates a DateFormat with no Calendar or NumberFormat
associated with it. This constructor depends on the subclasses to fill in
the calendar and numberFormat fields.
ICU 2.0
void DateFormat (const DateFormat & )
Copy constructor.
ICU 2.0
DateFormat & operator= (const DateFormat & )
Default assignment operator.
ICU 2.0
Enumerations
enum EStyle
| Name | Value |
|---|---|
| kNone | -1 |
| kFull | 0 |
| kLong | 1 |
| kMedium | 2 |
| kShort | 3 |
| kDateOffset | kShort + 1 |
| kDateTime | 8 |
| kDateTimeOffset | kDateTime + 1 |
| kRelative | (1 << 7) |
| kFullRelative | (kFull | kRelative) |
| kLongRelative | kLong | kRelative |
| kMediumRelative | kMedium | kRelative |
| kShortRelative | kShort | kRelative |
| kDefault | kMedium |
| FULL | kFull |
| LONG | kLong |
| MEDIUM | kMedium |
| SHORT | kShort |
| DEFAULT | kDefault |
| DATE_OFFSET | kDateOffset |
| NONE | kNone |
| DATE_TIME | kDateTime |
Constants for various style patterns. These reflect the order of items in
the DateTimePatterns resource. There are 4 time patterns, 4 date patterns,
the default date-time pattern, and 4 date-time patterns. Each block of 4 values
in the resource occurs in the order full, long, medium, short.
ICU 2.4
Defined at line 166 of file ../../third_party/icu/default/source/i18n/unicode/datefmt.h
enum EField
| Name | Value |
|---|---|
| kEraField | UDAT_ERA_FIELD |
| kYearField | UDAT_YEAR_FIELD |
| kMonthField | UDAT_MONTH_FIELD |
| kDateField | UDAT_DATE_FIELD |
| kHourOfDay1Field | UDAT_HOUR_OF_DAY1_FIELD |
| kHourOfDay0Field | UDAT_HOUR_OF_DAY0_FIELD |
| kMinuteField | UDAT_MINUTE_FIELD |
| kSecondField | UDAT_SECOND_FIELD |
| kMillisecondField | UDAT_FRACTIONAL_SECOND_FIELD |
| kDayOfWeekField | UDAT_DAY_OF_WEEK_FIELD |
| kDayOfYearField | UDAT_DAY_OF_YEAR_FIELD |
| kDayOfWeekInMonthField | UDAT_DAY_OF_WEEK_IN_MONTH_FIELD |
| kWeekOfYearField | UDAT_WEEK_OF_YEAR_FIELD |
| kWeekOfMonthField | UDAT_WEEK_OF_MONTH_FIELD |
| kAmPmField | UDAT_AM_PM_FIELD |
| kHour1Field | UDAT_HOUR1_FIELD |
| kHour0Field | UDAT_HOUR0_FIELD |
| kTimezoneField | UDAT_TIMEZONE_FIELD |
| kYearWOYField | UDAT_YEAR_WOY_FIELD |
| kDOWLocalField | UDAT_DOW_LOCAL_FIELD |
| kExtendedYearField | UDAT_EXTENDED_YEAR_FIELD |
| kJulianDayField | UDAT_JULIAN_DAY_FIELD |
| kMillisecondsInDayField | UDAT_MILLISECONDS_IN_DAY_FIELD |
| ERA_FIELD | UDAT_ERA_FIELD |
| YEAR_FIELD | UDAT_YEAR_FIELD |
| MONTH_FIELD | UDAT_MONTH_FIELD |
| DATE_FIELD | UDAT_DATE_FIELD |
| HOUR_OF_DAY1_FIELD | UDAT_HOUR_OF_DAY1_FIELD |
| HOUR_OF_DAY0_FIELD | UDAT_HOUR_OF_DAY0_FIELD |
| MINUTE_FIELD | UDAT_MINUTE_FIELD |
| SECOND_FIELD | UDAT_SECOND_FIELD |
| MILLISECOND_FIELD | UDAT_FRACTIONAL_SECOND_FIELD |
| DAY_OF_WEEK_FIELD | UDAT_DAY_OF_WEEK_FIELD |
| DAY_OF_YEAR_FIELD | UDAT_DAY_OF_YEAR_FIELD |
| DAY_OF_WEEK_IN_MONTH_FIELD | UDAT_DAY_OF_WEEK_IN_MONTH_FIELD |
| WEEK_OF_YEAR_FIELD | UDAT_WEEK_OF_YEAR_FIELD |
| WEEK_OF_MONTH_FIELD | UDAT_WEEK_OF_MONTH_FIELD |
| AM_PM_FIELD | UDAT_AM_PM_FIELD |
| HOUR1_FIELD | UDAT_HOUR1_FIELD |
| HOUR0_FIELD | UDAT_HOUR0_FIELD |
| TIMEZONE_FIELD | UDAT_TIMEZONE_FIELD |
Field selector for FieldPosition for DateFormat fields.
ICU 3.4 use UDateFormatField instead, since this API will be
removed in that release
Defined at line 911 of file ../../third_party/icu/default/source/i18n/unicode/datefmt.h
Friends
class DateFmtKeyByStyle