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
provides many class methods for obtaining default date/time
formatters based on the default or a given locale and a number of formatting
styles. The formatting styles include FULL
, LONG
, MEDIUM
, and SHORT
. More
detail and examples of using these styles are provided in the method
descriptions.
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.
To format a date for the current Locale, use one of the static factory methods:
myString = DateFormat.getDateInstance().format(myDate);
If you are formatting multiple dates, 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 < myDate.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);
If the specified locale contains "ca" (calendar), "rg" (region override), and/or "tz" (timezone) Unicode extensions, the calendar, the country and/or the time zone for formatting are overridden. If both "ca" and "rg" are specified, the calendar from the "ca" extension supersedes the implicit one from the "rg" extension.
You can use a DateFormat to parse also.
myDate = df.parse(myString);
Use getDateInstance
to get the normal date format for that country.
There are other static factory methods available.
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
.
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
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.
extends
Format, NumberFormat, SimpleDateFormat, java.util.Calendar, java.util.GregorianCalendar, java.util.TimeZone
@implSpec
format(Date, StringBuffer, FieldPosition)
and
parse(String, ParsePosition)
methods may throw
NullPointerException
, if any of their parameter is null
.
The subclass may provide its own implementation and specification about
NullPointerException
.setCalendar(Calendar)
, setNumberFormat(NumberFormat)
and setTimeZone(TimeZone)
methods
do not throw NullPointerException
when their parameter is
null
, but any subsequent operations on the same instance may throw
NullPointerException
.getCalendar()
, getNumberFormat()
and
getTimeZone()
methods may return null
, if the respective
values of this instance is set to null
through the corresponding
setter methods. For Example: getTimeZone()
may return null
,
if the TimeZone
value of this instance is set as
setTimeZone(null)
.