Friday, September 16, 2011

How to Convert Date to String in Java with Example

Some times we need to convert java.util.Date to string in java  may for displaying purpose I need it that while working on displaytag 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 java.text package and they are very powerful and you can use them for conversion. it also good for parsing string into date and can be used to show in various locale also.

Steps for converting Date to String in Java

Its very easy with the use of SimpleDateFormat, here are the exact steps:

convert date to string, simpleDateFormat in Java1) First step is to create a date format using SimpleDateFormat class
2) Call format() method of SimpleDateFormat by passing Date object this will return String representation of date into specified date format.      

Now let’s see 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-2011"
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/2011"
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-11"
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-11"
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 are some important points about SimpleDateFormat which is worth remembering

1)      Common point of confusion between “m” and “M” , small case “m” represent minutes while “M” represent Month Also “d” represent date in month while “D” represent 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  are not thread-safe. They are not synchronized so its better you create separate DateFormat for each thread to avoid any race condition while parsing date in java.

It’s very important for any java developer 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 little careful with format and thread-safety .

Further Reading
Java Fundamentals, Part 1 and 2
Core Java For the Impatient - Covers Java SE 8
Java Fundamentals: The Java Language

Some more java post you may find Interesing


Jirka Pinkas said...

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:

And also you can choose not to use class SimpleDateFormat. There's a useful Java library that is more easier to work with: Joda-time

Javin @ debugging in java said...

Thanks Jirka for Joda-time library, does it handle thread-safety limitation of SimpleDateFormat as well ?

Jirka Pinkas said...

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

Anonymous said...

when i trying to convert string of date 22-01-2014 to
date :Sun Dec 29 00:00:00 IST 2013
date :2013-12-29
it will changes wrong date why

Anonymous said...

SimpleDateFormat sdf=new SimpleDateFormat("DD-MM-YYYY");
java.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());

Sanjeev said...

D is for "Day in a year" while d is for "Day in a month".

Anonymous said...

How do you convert a date to ms and do some math like it is greater than 1 day I will do something...Thanks

Post a Comment