Parsing and Formatting Dates in Java

Jakob Jenkov
Last update: 2019-06-10

It is possible to both parse dates from strings, and format dates to strings, using Java's java.text.SimpleDateFormat class. I have covered SimpleDateFormat in more detail in my Java Internationalization tutorial, in the text SimpleDateFormat.

It is also possible to parse and format dates using the newer Java DateTimeFormatter which is able to parse and format dates from and to the newer date time classes added in Java 8.

Even though both classes for parsing and formatting dates are covered in more detail in their own texts, I will show you a few examples of how to use them below.

SimpleDateFormat Example

Here is an example of how to format and parse a date using the SimpleDateFormat class. The SimpleDateFormat class works on java.util.Date instances. Here are two simple examples:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

String dateString = format.format( new Date()   );
Date   date       = format.parse ( "2009-12-31" );    

The string passed as parameter to the SimpleDateFormat class is a pattern that tells how the instance is to parse and format dates. In the example above I used the pattern "yyyy-MM-dd" which means 4 digits for the year (yyyy), two digits for month (MM) and two digits for day(dd). The digit groups are separated by dashes (-) because I specified that in the pattern too, between the digit groups.

Below is a list of the most common pattern letters you can use. For a full list, see the official JavaDoc for the SimpleDateFormat class.

y   = year   (yy or yyyy)
M   = month  (MM)
d   = day in month (dd)
h   = hour (0-12)  (hh)
H   = hour (0-23)  (HH)
m   = minute in hour (mm)
s   = seconds (ss)
S   = milliseconds (SSS)
z   = time zone  text        (e.g. Pacific Standard Time...)
Z   = time zone, time offset (e.g. -0800)

Here are a few pattern examples, with examples of how each pattern would format or expect to parse a date:

yyyy-MM-dd           (2009-12-31)

dd-MM-YYYY           (31-12-2009)
yyyy-MM-dd HH:mm:ss  (2009-12-31 23:59:59)

HH:mm:ss.SSS         (23:59.59.999)

yyyy-MM-dd HH:mm:ss.SSS   (2009-12-31 23:59:59.999)

yyyy-MM-dd HH:mm:ss.SSS Z   (2009-12-31 23:59:59.999 +0100)        

DateTimeFormatter Example

Another way to format dates is to use the DateTimeFormatter which works with the newer date time classes added in Java 8. Here is a DateTimeFormatter example of formatting a date as a string:

DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;

String formattedDate = formatter.format(;

As you can see, the DateTimeFormatter has a few predefined instances you can use. In the example above we use the DateTimeFormatter.BASIC_ISO_DATE instance which is configured to parse and format dates using the ISO date time format.

Jakob Jenkov

Featured Videos

Java ForkJoinPool

P2P Networks Introduction


Java Persistence
Close TOC
All Tutorial Trails
All Trails
Table of contents (TOC) for this tutorial trail
Trail TOC
Table of contents (TOC) for this tutorial
Page TOC
Previous tutorial in this tutorial trail
Next tutorial in this tutorial trail