Home Page
>
Internationalization
>
Formatting
Customizing Formats
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.
About Patterns
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:
Customized Date and Time Formats
|
Pattern
|
Output
|
|
dd.MM.yy
|
09.04.98
|
|
yyyy.MM.dd G 'at' hh:mm:ss z
|
1998.04.09 AD at 06:15:55 PDT
|
|
EEE, MMM d, ''yy
|
Thu, Apr 9, '98
|
|
h:mm a
|
6:15 PM
|
|
H:mm
|
18:15
|
|
H:mm:ss:SSS
|
18:15:55:624
|
|
K:mm a,z
|
6:15 PM,PDT
|
|
yyyy.MMMMM.dd GGG hh:mm aaa
|
1998.April.09 AD 06:15 PM
|
Patterns and Locale
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: ven 10 avr 98
Locale: de_DE
Result: Fr 10 Apr 98
Locale: en_US
Result: Thu 9 Apr 98
Date Format Pattern Syntax
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 | 1996 |
| 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 |