Java SimpleDateFormat – Java Date Format

Filed Under: Java

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.

Java DateFormat

Java SimpleDateFormat, Java Date Format Example

  • 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) both, whereas DateFormat allows only formatting of Date.

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 is 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 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

Comments

  1. John Snow says:

    You Should Append About Calendar Class because Date is deprecated

  2. sridhar says:

    How can i set date format 20th may, 2010

  3. Shane McCurdy says:

    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)

  4. ManishS says:

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

Leave a Reply

Your email address will not be published. Required fields are marked *

close
Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages