java.text.DateFormat.
_usage_
DateFormat is an abstract class for date/time formatting subclasses which formats and parses dates or time in a
language-independent manner. The date/time formatting subclass, such as SimpleDateFormat, allows for formatting
(i.e., date -> text), parsing (text -> date), and normalization. The date is represented as a Date
object or as the milliseconds since January 1, 1970, 00:00:00 GMT.
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. It provides many class
methods for obtaining default date/time formatters based on the default for a given locale and a number of formatting
styles or arbitrary "skeletons".
- The formatting styles include FULL, LONG, MEDIUM, and SHORT. More detail and examples of using these styles are
provided in the method descriptions.
- The formatting styles only cover a fraction of the necessary usage. You often need to have just certain
combinations of fields, like Month and Year, but have it to be formatted appropriate to a given locale. This is done
using the (misnamed) getPatternInstance() method, supplying a skeleton. There are a number of constants that have
common pre-defined skeletons, such as
#MINUTE_SECOND for something like "13:45" or
#YEAR_ABBR_MONTHfor something like "Sept 2012".
To format a date for the current Locale, use one of the static factory methods:
myString = DateFormat.getDateInstance().format(myDate);
myString = DateFormat.getPatternInstance(DateFormat.YEAR_ABBR_MONTH).format(myDate);
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.
DateFormat df = DateFormat.getDateInstance();
for (int i = 0; i < a.length; ++i) {
output.println(df.format(myDate[i]) + "; ");
}
To format a date for a different Locale, specify it in the call to getDateInstance().
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE);
You can use a DateFormat to parse also.
myDate = df.parse(myString);
There are many static factory methods available. Use getDateInstance to get the normal date format for that country.
Use getTimeInstance to get the time format for that country. Use getDateTimeInstance to get a date and time format.
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.
Use getPatternInstance to format with a skeleton. Typically this is with a predefined skeleton, like
#YEAR_ABBR_MONTH for something like "Sept 2012". If you don't want to use one of the predefined skeletons,
you can supply your own. The skeletons are like the patterns in SimpleDateFormat, except they:
- only keep the field pattern letter and ignore all other parts in a pattern, such as space, punctuation, and
string literals.
- are independent of the order of fields.
- ignore certain differences in the field's pattern letter length:
- For those non-digit calendar fields, the pattern letter length is important, such as MMM, MMMM, and MMMMM; E and
EEEE, and the field's pattern letter length is honored.
- For the digit calendar fields, such as M or MM, d or dd, yy or yyyy, the field pattern length is ignored and the
best match, which is defined in date time patterns, will be returned without honor the field pattern letter length in
skeleton.
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 put it in a try block in case you
encounter an unusual one.
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.
Synchronization
Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple
threads access a format concurrently, it must be synchronized externally.