Java SimpleDateFormat – Java Date Format

Filed Under: Java
Java Simpledateformat

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 PatternDate or Time componentExamples
GEra designatorAD
yYear2018(yyyy),18(yy)
MMonth in yearJuly(MMMM), Jul(MMM), 07(MM)
wResults in week in year16
WResults in week in month3
DGives the day count in the year266
dDay of the month09(dd), 9(d)
FDay of the week in month4
EDay name in the weekTuesday, Tue
uDay number of week where 1 represents Monday, 2 represents Tuesday and so on2
aAM or PM markerAM
HHour in the day (0-23)12
kHour in the day (1-24)23
KHour in am/pm for 12 hour format (0-11)0
hHour in am/pm for 12 hour format (1-12)12
mMinute in the hour59
sSecond in the minute35
SMillisecond in the minute978
zTimezonePacific Standard Time; PST; GMT-08:00
ZTimezone offset in hours (RFC pattern)-0800
XTimezone 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.

PatternResult
MM/dd/yyyy01/02/2018
dd-M-yyyy hh:mm:ss02-1-2018 06:07:59
dd MMMM yyyy02 January 2018
dd MMMM yyyy zzzz02 January 2018 India Standard Time
E, dd MMM yyyy HH:mm:ss zTue, 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. sda says:

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

    1. Pankaj says:

      Thanks for pointing it out, I have corrected it.

  2. Joe E says:

    This is the best tutorial on dates I have ever seen

  3. John Snow says:

    You Should Append About Calendar Class because Date is deprecated

  4. sridhar says:

    How can i set date format 20th may, 2010

  5. 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)

  6. 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