Download the JDK
Search the Tutorials
Hide the TOC
Trail: Internationalization
Lesson: Formatting
Section: Dates and Times
Formatting
Numbers and Currencies
Using Predefined Formats
Customizing Formats
Dates and Times
Using Predefined Formats
Customizing Formats
Changing Date Format Symbols
Messages
Dealing with Compound Messages
Handling Plurals
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

Previous page: Using Predefined Formats
Next page: Changing Date Format Symbols