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.
1 2 3 |
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.
1 2 3 4 5 |
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.
1 2 3 4 5 |
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.
1 2 3 |
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.
1 2 3 4 5 |
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.
1 2 3 4 5 |
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.
1 2 3 4 5 |
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.
1 2 3 4 5 |
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?
1 2 3 4 5 |
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