As a Java developer we often need to convert java.util.Date or LocalDate to String in Java for displaying purpose or sending Date as String in JSON or XML messages and that's where having a agree upon Date Format is very important. It easily allows you to convert your Date as String and pass between two System. I need it that while working on displaying date in my application and then I thought about this article to list down various way of converting this in various ways after some reading I found that SimpleDateFormat makes this quite easy.
To get the feel of Date API in Java and to familiarize ourselves with these classes we will see different examples of converting date to String in our application.
Both DateFormat and SimpleDateFormat class belongs to java.text package and they are very powerful and you can use them for conversion. it also good for parsing a string into a date and can be used to show in various locales also.
Both DateFormat and SimpleDateFormat class belongs to java.text package and they are very powerful and you can use them for conversion. it also good for parsing a string into a date and can be used to show in various locales also.
By the way, if you are using Java 8 and beyond then I suggest you to use LocalDate and new Date and Time API. LocalDate are easier to format using DateFormatter class as it has many builtin formatted for ISO date format and popular YYYYMMDD format and LocalDate are also immutable and thread-safe which means you can easily share them with threads without worrying about thread-safety issue.
Steps for converting Date to String in Java
It's very easy with the use of SimpleDateFormat, here are the exact steps:
1) The first step is to create a date format using SimpleDateFormat class
2) Call format() method of SimpleDateFormat bypassing Date object this will return String representation of date into specified date format.
Now let’s see a few examples of converting date to String in java:
//Creating Date in java with today's date.
Date dateNow = new Date();
//change date into string yyyyMMdd format example "20110914"
SimpleDateFormat dateformatyyyyMMdd = new SimpleDateFormat("yyyyMMdd");
String date_to_string = dateformatyyyyMMdd.format(dateNow);
System.out.println("date into yyyyMMdd format: " + date_to_string);
//converting date into ddMMyyyy format example "14092011"
SimpleDateFormat dateformatddMMyyyy = new SimpleDateFormat("ddMMyyyy");
date_to_string = dateformatddMMyyyy.format(dateNow);
System.out.println("Today's date into ddMMyyyy format: " + date_to_string);
//change date to string on dd-MM-yyyy format e.g. "14-09-2022"
SimpleDateFormat dateformatJava = new SimpleDateFormat("dd-MM-yyyy");
date_to_string = dateformatJava.format(dateNow);
System.out.println("Today's date into dd-MM-yyyy format: " + date_to_string);
//converting date to string dd/MM/yyyy format for example "14/09/2022"
SimpleDateFormat formatDateJava = new SimpleDateFormat("dd/MM/yyyy");
date_to_string = formatDateJava.format(dateNow);
System.out.println("Today's date into dd/MM/yyyy format: " + date_to_string);
//date to dd-MMM-yy format e.g. "14-Sep-22"
SimpleDateFormat ddMMMyyFormat = new SimpleDateFormat("dd-MMM-yy");
date_to_string = ddMMMyyFormat.format(dateNow);
System.out.println("Today's date into dd-MMM-yy format: " + date_to_string);
//convert date to dd-MMMM-yy format e.g. "14-September-22"
SimpleDateFormat ddMMMMyyFormat = new SimpleDateFormat("dd-MMMM-yy");
date_to_string = ddMMMMyyFormat.format(dateNow);
System.out.println("date into dd-MMMM-yy format: " + date_to_string);
For complete details on available symbols for date conversion, you can check java doc of DateFormat and SimpleDateFormat class.
Here is a nice diagram showing most of the Date time related formats you can use in Java:
Here are some important points about SimpleDateFormat which is worth remembering
1) The common point of confusion between “m” and “M” , small case “m” represent minutes while “M” represents Month Also “d” represent date in month while “D” represents Day of week. This is most common cause of error while converting String to date and back date to string. In shot ddMMyy is not equal to DDmmyy.
2) It’s also worth noting that SimpleDateFormat is not thread-safe. They are not synchronized so it's better you create separate DateFormat for each thread to avoid any race condition while parsing date in java.
That's all about how to convert Date to String in Java. It’s very important for any java developer to be it senior or junior to get familiarize himself with Date, Time, and Calendar API. SimpleDateFormat is an excellent utility for converting String to Date and then Date to String but you just need to be a little careful with format and thread safety.
Some more java posts you may find Interesting
- Key differences between Vector and ArrayList in java
- Difference between StringBuffer and StringBuilder
- How to resolve OutOfMemoryError in Java
- How to deal with UnSupportedClassVersionError in Java
- ArrayList tutorial with examples on Java 1.5 generics
- Key points while set classpath in Linux UNIX and Windows
- 10 enum examples in Java
- Top 15 multi-threading interview questions answers
Nice! I'd like to add that you can find well arranged table with all permitted letters used in format patterns like yyyy.MM.dd in Javadoc API: http://download.oracle.com/javase/7/docs/api/index.html?java/text/SimpleDateFormat.html
ReplyDeleteAnd also you can choose not to use class SimpleDateFormat. There's a useful Java library that is more easier to work with: Joda-time http://joda-time.sourceforge.net/
Thanks Jirka for Joda-time library, does it handle thread-safety limitation of SimpleDateFormat as well ?
ReplyDeleteSome classes in Joda time are thread safe and some ar not, but formatting classes are all thread safe, so it does overcome this limitation of SimpleDateFormat.
ReplyDeletewhen i trying to convert string of date 22-01-2014 to java.util.date
ReplyDeletedate :Sun Dec 29 00:00:00 IST 2013
date :2013-12-29
it will changes wrong date why
SimpleDateFormat sdf=new SimpleDateFormat("DD-MM-YYYY");
ReplyDeletejava.util.Date up = sdf.parse(consupdated);
System.out.println("date :"+up);
but the output comes as wrong date why?
java.sql.Date uDate = new java.sql.Date(up.getTime());
D is for "Day in a year" while d is for "Day in a month".
ReplyDeleteHow do you convert a date to ms and do some math like it is greater than 1 day I will do something...Thanks
ReplyDelete