The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available.
See Java Language Changes for a summary of updated language features in Java SE 9 and subsequent releases.
See JDK Release Notes for information about new features, enhancements, and removed or deprecated options for all JDK releases.
The previous section, Using Predefined Formats, described the formatting styles provided by the DateFormat
class. In most cases these predefined formats are adequate. However, if you want to create your own customized formats, you can use the
SimpleDateFormat
class.
The code examples that follow demonstrate the methods of the SimpleDateFormat
class. You can find the full source code for the examples in the file named
SimpleDateFormatDemo
.
When you create a SimpleDateFormat
object, you specify a pattern String
. The contents of the pattern String
determine the format of the date and time. For a full description of the pattern's syntax, see the tables in Date Format Pattern Syntax.
The following code formats a date and time according to the pattern String
passed to the SimpleDateFormat
constructor. The String
returned by the format
method contains the formatted date and time that are to be displayed.
Date today; String output; SimpleDateFormat formatter; formatter = new SimpleDateFormat(pattern, currentLocale); today = new Date(); output = formatter.format(today); System.out.println(pattern + " " + output);
The following table shows the output generated by the previous code example when the U.S. Locale
is specified:
Pattern | Output |
---|---|
dd.MM.yy | 30.06.09 |
yyyy.MM.dd G 'at' hh:mm:ss z | 2009.06.30 AD at 08:29:36 PDT |
EEE, MMM d, ''yy | Tue, Jun 30, '09 |
h:mm a | 8:29 PM |
H:mm | 8:29 |
H:mm:ss:SSS | 8:28:36:249 |
K:mm a,z | 8:29 AM,PDT |
yyyy.MMMMM.dd GGG hh:mm aaa | 2009.June.30 AD 08:29 AM |
The SimpleDateFormat
class is locale-sensitive. If you instantiate SimpleDateFormat
without a Locale
parameter, it will format the date and time according to the default Locale
. Both the pattern and the Locale
determine the format. For the same pattern, SimpleDateFormat
may format a date and time differently if the Locale
varies.
In the example code that follows, the pattern is hardcoded in the statement that creates the SimpleDateFormat
object:
Date today; String result; SimpleDateFormat formatter; formatter = new SimpleDateFormat("EEE d MMM yy", currentLocale); today = new Date(); result = formatter.format(today); System.out.println("Locale: " + currentLocale.toString()); System.out.println("Result: " + result);
When the currentLocale
is set to different values, the preceding code example generates this output:
Locale: fr_FR Result: mar. 30 juin 09 Locale: de_DE Result: Di 30 Jun 09 Locale: en_US Result: Tue 30 Jun 09
You can design your own format patterns for dates and times from the list of symbols in the following table:
Symbol | Meaning | Presentation | Example |
---|---|---|---|
G | era designator | Text | AD |
y | year | Number | 2009 |
M | month in year | Text & Number | July & 07 |
d | day in month | Number | 10 |
h | hour in am/pm (1-12) | Number | 12 |
H | hour in day (0-23) | Number | 0 |
m | minute in hour | Number | 30 |
s | second in minute | Number | 55 |
S | millisecond | Number | 978 |
E | day in week | Text | Tuesday |
D | day in year | Number | 189 |
F | day of week in month | Number | 2 (2nd Wed in July) |
w | week in year | Number | 27 |
W | week in month | Number | 2 |
a | am/pm marker | Text | PM |
k | hour in day (1-24) | Number | 24 |
K | hour in am/pm (0-11) | Number | 0 |
z | time zone | Text | Pacific Standard Time |
' | escape for text | Delimiter | (none) |
' | single quote | Literal | ' |
Characters that are not letters are treated as quoted text. That is, they will appear in the formatted text even if they are not enclosed within single quotes.
The number of symbol letters you specify also determines the format. For example, if the "zz" pattern results in "PDT," then the "zzzz" pattern generates "Pacific Daylight Time." The following table summarizes these rules:
Presentation | Number of Symbols | Result |
---|---|---|
Text | 1 - 3 | abbreviated form, if one exists |
Text | >= 4 | full form |
Number | minimum number of digits is required | shorter numbers are padded with zeros (for a year, if the count of 'y' is 2, then the year is truncated to 2 digits) |
Text & Number | 1 - 2 | number form |
Text & Number | 3 | text form |