In this tutorial, we will show you how to convert a String to java.util.Date
. Many Java beginners are stuck in the Date conversion, hope this summary guide will helps you in some ways.
// String -> Date
SimpleDateFormat.parse(String);
// Date -> String
SimpleDateFormat.format(date);
Refer to table below for some of the common date and time patterns used in java.text.SimpleDateFormat
, refer to this JavaDoc
Letter | Description | Examples |
y | Year | 2013 |
M | Month in year | July, 07, 7 |
d | Day in month | 1-31 |
E | Day name in week | Friday, Sunday |
a | Am/pm marker | AM, PM |
H | Hour in day | 0-23 |
h | Hour in am/pm | 1-12 |
m | Minute in hour | 0-60 |
s | Second in minute | 0-60 |
Note
You may interest at this Java 8 example – How to convert String to LocalDate
1. String = 7-Jun-2013
If 3 ‘M’, then the month is interpreted as text (Mon-Dec), else number (01-12).
TestDateExample1.java
package com.favtuts.time; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class StringToDateExamples { public static void main(String[] args) { formatMonthWith3M(); } static void formatMonthWith3M() { SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy"); String dateInString = "7-Jun-2013"; try { Date date = formatter.parse(dateInString); System.out.println(date); System.out.println(formatter.format(date)); } catch (ParseException e) { e.printStackTrace(); } } }
Output
Fri Jun 07 00:00:00 ICT 2013
07-Jun-2013
2. String = 07/06/2013
TestDateExample2.java
package com.favtuts.time; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class StringToDateExamples { public static void main(String[] args) { formatMonthWith2M(); } static void formatMonthWith2M() { SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); String dateInString = "07/06/2013"; try { Date date = formatter.parse(dateInString); System.out.println(date); System.out.println(formatter.format(date)); } catch (ParseException e) { e.printStackTrace(); } } }
Output
Fri Jun 07 00:00:00 ICT 2013
07/06/2013
3. String = Fri, June 7 2013
TestDateExample3.java
package com.favtuts.time; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class StringToDateExamples { public static void main(String[] args) { formatDateWithWeekDay(); } static void formatDateWithWeekDay() { SimpleDateFormat formatter = new SimpleDateFormat("E, MMM dd yyyy"); String dateInString = "Fri, June 7 2013"; try { Date date = formatter.parse(dateInString); System.out.println(date); System.out.println(formatter.format(date)); } catch (ParseException e) { e.printStackTrace(); } } }
Output
Fri Jun 07 00:00:00 ICT 2013
Fri, Jun 07 2013
4. String = Friday, Jun 7, 2013 12:10:56 PM
TestDateExample4.java
package com.favtuts.time; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class StringToDateExamples { public static void main(String[] args) { formatDatetimeWithWeekDay(); } static void formatDatetimeWithWeekDay() { SimpleDateFormat formatter = new SimpleDateFormat("EEEE, MMM dd, yyyy HH:mm:ss a"); String dateInString = "Friday, Jun 7, 2013 12:10:56 PM"; try { Date date = formatter.parse(dateInString); System.out.println(date); System.out.println(formatter.format(date)); } catch (ParseException e) { e.printStackTrace(); } } }
Output
Fri Jun 07 12:10:56 ICT 2013
Friday, Jun 07, 2013 12:10:56 PM
5. String = 2014-10-05T15:23:01Z
Z suffix means UTC, java.util.SimpleDateFormat
doesn’t parse it correctly, you need to replace the suffix Z with ‘+0000’.
TestDateExample5.java
package com.favtuts.time; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public class StringToDateExamples { public static void main(String[] args) { formatDatetimeUTC(); } static void formatDatetimeUTC() { // Z suffix means UTC, java.util.SimpleDateFormat doesn’t parse it correctly, // you need to replace the suffix Z with ‘+0000’. SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); //String dateInString = "2014-10-05T23:23:01Z"; // -> 2014-10-06T06:23:01+0700 String dateInString = "2014-10-05T15:23:01Z"; // -> 2014-10-05T22:23:01+0700 try { Date date = formatter.parse(dateInString.replaceAll("Z$", "+0000")); System.out.println(date); System.out.println("time zone : " + TimeZone.getDefault().getID()); System.out.println(formatter.format(date)); } catch (ParseException e) { e.printStackTrace(); } } }
Output
Sun Oct 05 22:23:01 ICT 2014
time zone : Asia/Ho_Chi_Minh
2014-10-05T22:23:01+0700
In Java 8, you can convert it into a java.time.Instant
object, and display it with a specified time zone.
TestDateExample6.java
package com.favtuts.time; import java.time.*; public class StringToDateExamples { public static void main(String[] args) { formatDatetimeUTCWithInstant(); } static void formatDatetimeUTCWithInstant() { String dateInString = "2014-10-05T15:23:01Z"; Instant instant = Instant.parse(dateInString); System.out.println(instant); //get date time only LocalDateTime result = LocalDateTime.ofInstant(instant, ZoneId.of(ZoneOffset.UTC.getId())); System.out.println(result); //get date time + timezone ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Africa/Tripoli")); System.out.println(zonedDateTime); //get date time + timezone ZonedDateTime zonedDateTime2 = instant.atZone(ZoneId.of("Europe/Athens")); System.out.println(zonedDateTime2); } }
Output
2014-10-05T15:23:01Z
2014-10-05T15:23:01
2014-10-05T17:23:01+02:00[Africa/Tripoli]
2014-10-05T18:23:01+03:00[Europe/Athens]
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-basic/time