// Tutorial //

Java SimpleDateFormat - Java Date Format

Published on August 3, 2022
Default avatar
By Pankaj
Developer and author at DigitalOcean.
Java SimpleDateFormat - Java Date Format

While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.

Java SimpleDateFormat and DateFormat classes are used for date formatting. It is mostly used where we need to display or utilize the date and time functionality of Java. Both of these classes are present in com.text package.

  • DateFormat is used for formatting a date into String based on specific locale that is provided as input.
  • The locale is used for specifying the region and language for making the code more locale to the user.
  • The way of writing date is different in different regions of the world. For example, 31st Dec 2017 will be written in India as 31-12-2017 but the same thing will be written in US as 12-31-2017.
  • Date Format classes are not synchronized, it’s recommended to create separate instance for each thread.

Creating DateFormat instance

DateFormat object can be created using the getDateInstance() and getTimeInstance() method of the DateFormat class.

Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);

As shown in the example above, the getDateInstance method of DateFormat needs two input parameters, the first parameter specifies the DateFormat to use and the second parameter is the locale.

Java Date Format Example

DateFormat class has a format method which is responsible for formatting.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Output: 3 janv. 2018 In the above example, for creating a DateFormat instance we are using getDateInstance() method. For performing a time format, we need an instance of time. We will be using getTimeInstance() method for getting an instance of time.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Output: 11:03:01

Java SimpleDateFormat

SimpleDateFormat is very much like DateFormat, the only major difference between them is that SimpleDateFormat can be used for formatting (Date to String conversion) and for parsing (String to Date conversion) with locale support, whereas DateFormat don’t have locale support. Also, DateFormat is an abstract class that provides base support for date formatting and parsing, SimpleDateFormat is the concrete class that extends DateFormat class.

Creating SimpleDateFormat instance

SimpleDateFormat can be created using the SimpleDateFormat constructor, the constructor is a parametrised constructor and needs a String pattern as the parameter.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

In the example above the String pattern is the pattern which will be used to format a date and the output will be generated in that pattern as “MM-dd-yyyy”.

Java SimpleDateFormat Example

In order to parse a date we need to create an instance of SimpleDateFormat using the constructor and then use format() method. Let us look at an example for formatting date using SimpleDateFormat.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Output: 01-02-2018 In the example above, the date is 2nd January 2018. For parsing time, we have to change the pattern while creating SimpleDateFormat instance.

String pattern = " HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Output: 13:03:15.454+0530 In the example above the patters is a time pattern and the formatting for the current time is done based on the pattern.

Parsing Using SimpleDateFormat

Parsing is conversion of String into a java.util.Date instance. We can parse a string to a date instance using parse() method of the SimpleDateFormat class. For parsing a String to Date we need an instance of the SimpleDateFormat class and a string pattern as input for the constructor of the class.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2018");
System.out.println(date);

Output: Sat Dec 01 00:00:00 IST 2018 Now let’s look at SimpleDateFormat example to parse time.

String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);

Output: Thu Jan 01 22:00:03 IST 1970 In the example above, because we have not specified any date the program considered epoch as the date i.e 01-Jan-1970.

Java SimpleDateFormat with Locale

We have worked with Locale as part of the DateFormat and we have seen that locales are used based on regions. Let us consider we want to use SimpleDateFormat in French, how to accomplish this?

String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat =new SimpleDateFormat(pattern, new Locale("fr", "FR"));
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Output: mardi janvier 2018 14:51:02.354+0530 In the above example, the month and day are named in French based on the locale provided as input. We have seen different ways of formatting and parsing. Let us have a look at the pattern syntax that should be used for the formatting pattern.

Letter for Pattern Date or Time component Examples
G Era designator AD
y Year 2018(yyyy),18(yy)
M Month in year July(MMMM), Jul(MMM), 07(MM)
w Results in week in year 16
W Results in week in month 3
D Gives the day count in the year 266
d Day of the month 09(dd), 9(d)
F Day of the week in month 4
E Day name in the week Tuesday, Tue
u Day number of week where 1 represents Monday, 2 represents Tuesday and so on 2
a AM or PM marker AM
H Hour in the day (0-23) 12
k Hour in the day (1-24) 23
K Hour in am/pm for 12 hour format (0-11) 0
h Hour in am/pm for 12 hour format (1-12) 12
m Minute in the hour 59
s Second in the minute 35
S Millisecond in the minute 978
z Timezone Pacific Standard Time; PST; GMT-08:00
Z Timezone offset in hours (RFC pattern) -0800
X Timezone offset in ISO format -08; -0800; -08:00

Note: In the patterns above some letters should be used in different number for different results like for month July(MMMM), Jul(MMM), 07(MM) results differently.

Java Date Time Format Example

We discussed about various aspects of DateFormat and SimpleDateFormat. Let us now look at some examples for different formats of date and time.

Pattern Result
MM/dd/yyyy 01/02/2018
dd-M-yyyy hh:mm:ss 02-1-2018 06:07:59
dd MMMM yyyy 02 January 2018
dd MMMM yyyy zzzz 02 January 2018 India Standard Time
E, dd MMM yyyy HH:mm:ss z Tue, 02 Jan 2018 18:07:59 IST

That’s all for java SimpleDateFormat example for date formatting and parsing string to date in java programs. Reference: SimpleDateFormat API Doc, DateFormat API Doc


Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.

Sign up
About the authors
Default avatar
Pankaj

author

Developer and author at DigitalOcean.

Still looking for an answer?

Was this helpful?

Wrong, “whereas DateFormat allows only formatting of Date.” it can be for parse string to Date

- sda

    This is the best tutorial on dates I have ever seen

    - Joe E

      You Should Append About Calendar Class because Date is deprecated

      - John Snow

        How can i set date format 20th may, 2010

        - sridhar

          Thank you for the article, it’s been very helpful. I believe the day of the week should be amended in this manner below: EEEE, E Day name in the week Tuesday(EEEE), Tue(E or EEE)

          - Shane McCurdy

            You Should have addressed the important topic like Date conversion to different TimeZones. Anyway great tutorial.

            - ManishS