Convert java.util.Date to String

JavaDateFormattingjava.util.date

Java Problem Overview


I want to convert a java.util.Date object to a String in Java.

The format is 2010-05-30 22:15:52

Java Solutions


Solution 1 - Java

Convert a Date to a String using DateFormat#format method:

String pattern = "MM/dd/yyyy HH:mm:ss";

// Create an instance of SimpleDateFormat used for formatting 
// the string representation of date according to the chosen pattern
DateFormat df = new SimpleDateFormat(pattern);

// Get the today date using Calendar object.
Date today = Calendar.getInstance().getTime();        
// Using DateFormat format method we can create a string 
// representation of a date with the defined format.
String todayAsString = df.format(today);

// Print the result!
System.out.println("Today is: " + todayAsString);

From http://www.kodejava.org/examples/86.html

Solution 2 - Java

Format formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = formatter.format(date);

Solution 3 - Java

Commons-lang DateFormatUtils is full of goodies (if you have commons-lang in your classpath)

//Formats a date/time into a specific pattern
 DateFormatUtils.format(yourDate, "yyyy-MM-dd HH:mm:SS");

Solution 4 - Java

tl;dr

myUtilDate.toInstant()  // Convert `java.util.Date` to `Instant`.
          .atOffset( ZoneOffset.UTC )  // Transform `Instant` to `OffsetDateTime`.
          .format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )  // Generate a String.
          .replace( "T" , " " )  // Put a SPACE in the middle.

>2014-11-14 14:05:09

java.time

The modern way is with the java.time classes that now supplant the troublesome old legacy date-time classes.

First convert your java.util.Date to an Instant. The Instant class represents a moment on the timeline in UTC with a resolution of nanoseconds (up to nine (9) digits of a decimal fraction).

Conversions to/from java.time are performed by new methods added to the old classes.

Instant instant = myUtilDate.toInstant();

Both your java.util.Date and java.time.Instant are in UTC. If you want to see the date and time as UTC, so be it. Call toString to generate a String in standard ISO 8601 format.

String output = instant.toString();  

>2014-11-14T14:05:09Z

For other formats, you need to transform your Instant into the more flexible OffsetDateTime.

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );

>odt.toString(): 2020-05-01T21:25:35.957Z

See that code run live at IdeOne.com.

To get a String in your desired format, specify a DateTimeFormatter. You could specify a custom format. But I would use one of the predefined formatters (ISO_LOCAL_DATE_TIME), and replace the T in its output with a SPACE.

String output = odt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );

>2014-11-14 14:05:09

By the way I do not recommend this kind of format where you purposely lose the offset-from-UTC or time zone information. Creates ambiguity as to the meaning of that string’s date-time value.

Also beware of data loss, as any fractional second is being ignored (effectively truncated) in your String’s representation of the date-time value.

To see that same moment through the lens of some particular region’s wall-clock time, apply a ZoneId to get a ZonedDateTime.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );

>zdt.toString(): 2014-11-14T14:05:09-05:00[America/Montreal]

To generate a formatted String, do the same as above but replace odt with zdt.

String output = zdt.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
                   .replace( "T" , " " );

>2014-11-14 14:05:09

If executing this code a very large number of times, you may want to be a bit more efficient and avoid the call to String::replace. Dropping that call also makes your code shorter. If so desired, specify your own formatting pattern in your own DateTimeFormatter object. Cache this instance as a constant or member for reuse.

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" );  // Data-loss: Dropping any fractional second.

Apply that formatter by passing the instance.

String output = zdt.format( f );

About java.time

The java.time framework is built into Java 8 and later. These classes supplant the troublesome old date-time classes such as java.util.Date, .Calendar, & java.text.SimpleDateFormat.

The Joda-Time project, now in maintenance mode, advises migration to java.time.

To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations.

Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport and further adapted to Android in ThreeTenABP (see How to use…).

The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time.

Solution 5 - Java

Altenative one-liners in plain-old java:

String.format("The date: %tY-%tm-%td", date, date, date);

String.format("The date: %1$tY-%1$tm-%1$td", date);

String.format("Time with tz: %tY-%<tm-%<td %<tH:%<tM:%<tS.%<tL%<tz", date);

String.format("The date and time in ISO format: %tF %<tT", date);

This uses Formatter and relative indexing instead of SimpleDateFormat which is not thread-safe, btw.

Slightly more repetitive but needs just one statement. This may be handy in some cases.

Solution 6 - Java

Why don't you use Joda (org.joda.time.DateTime)? It's basically a one-liner.

Date currentDate = GregorianCalendar.getInstance().getTime();
String output = new DateTime( currentDate ).toString("yyyy-MM-dd HH:mm:ss");

// output: 2014-11-14 14:05:09

Solution 7 - Java

It looks like you are looking for SimpleDateFormat.

Format: yyyy-MM-dd kk:mm:ss

Solution 8 - Java

In single shot ;)

To get the Date

String date = new SimpleDateFormat("yyyy-MM-dd",   Locale.getDefault()).format(new Date());

To get the Time

String time = new SimpleDateFormat("hh:mm", Locale.getDefault()).format(new Date());

To get the date and time

String dateTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefaut()).format(new Date());

Happy coding :)

Solution 9 - Java

public static String formateDate(String dateString) {
	Date date;
	String formattedDate = "";
	try {
		date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss",Locale.getDefault()).parse(dateString);
		formattedDate = new SimpleDateFormat("dd/MM/yyyy",Locale.getDefault()).format(date);
	} catch (ParseException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	return formattedDate;
}

Solution 10 - Java

If you only need the time from the date, you can just use the feature of String.

Date test = new Date();
String dayString = test.toString();
String timeString = dayString.substring( 11 , 19 );

This will automatically cut the time part of the String and save it inside the timeString.

Solution 11 - Java

Here are examples of using new Java 8 Time API to format legacy java.util.Date:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z")
        .withZone(ZoneOffset.UTC);
    String utcFormatted = formatter.format(date.toInstant()); 

    ZonedDateTime utcDatetime = date.toInstant().atZone(ZoneOffset.UTC);
    String utcFormatted2 = utcDatetime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS Z"));
    // gives the same as above

    ZonedDateTime localDatetime = date.toInstant().atZone(ZoneId.systemDefault());
    String localFormatted = localDatetime.format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
    // 2011-12-03T10:15:30+01:00[Europe/Paris]

    String nowFormatted = LocalDateTime.now().toString(); // 2007-12-03T10:15:30.123

It is nice about DateTimeFormatter that it can be efficiently cached as it is thread-safe (unlike SimpleDateFormat).

List of predefined fomatters and pattern notation reference.

Credits:

https://stackoverflow.com/questions/22463062/how-to-parse-format-dates-with-localdatetime-java-8

https://stackoverflow.com/questions/25376242/java8-java-util-date-conversion-to-java-time-zoneddatetime

https://stackoverflow.com/questions/25229124/format-instant-to-string

https://stackoverflow.com/questions/30234594/whats-the-difference-between-java-8-zoneddatetime-and-offsetdatetime

Solution 12 - Java

The easiest way to use it is as following:

currentISODate = new Date().parse("yyyy-MM-dd'T'HH:mm:ss", "2013-04-14T16:11:48.000");

where "yyyy-MM-dd'T'HH:mm:ss" is the format of the reading date

output: Sun Apr 14 16:11:48 EEST 2013

Notes: HH vs hh

  • HH refers to 24h time format
  • hh refers to 12h time format

Solution 13 - Java

public static void main(String[] args) 
{
    Date d = new Date();
    SimpleDateFormat form = new SimpleDateFormat("dd-mm-yyyy hh:mm:ss");
    System.out.println(form.format(d));
    String str = form.format(d); // or if you want to save it in String str
    System.out.println(str); // and print after that
}

         

Solution 14 - Java

Let's try this

public static void main(String args[]) {

	Calendar cal = GregorianCalendar.getInstance();
	Date today = cal.getTime();
	DateFormat df7 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	try {			
		String str7 = df7.format(today);
		System.out.println("String in yyyy-MM-dd format is: " + str7);			
	} catch (Exception ex) {
      ex.printStackTrace();
	}
}

Or a utility function

public String convertDateToString(Date date, String format) {
	String dateStr = null;
	DateFormat df = new SimpleDateFormat(format);

	try {
		dateStr = df.format(date);
	} catch (Exception ex) {
		ex.printStackTrace();
	}
	return dateStr;
}

From Convert Date to String in Java

Solution 15 - Java

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String date = "2010-05-30 22:15:52";
    java.util.Date formatedDate = sdf.parse(date); // returns a String when it is parsed
    System.out.println(sdf.format(formatedDate)); // the use of format function returns a String

Solution 16 - Java

One Line option

This option gets a easy one-line to write the actual date.

> Please, note that this is using Calendar.class and SimpleDateFormat, and then it's not > logical to use it under Java8.

yourstringdate =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().getTime());

Solution 17 - Java

Date date = new Date();
String strDate = String.format("%tY-%<tm-%<td %<tH:%<tM:%<tS", date);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionnovicePrgrmrView Question on Stackoverflow
Solution 1 - JavaAli Ben MessaoudView Answer on Stackoverflow
Solution 2 - JavaCharlie SaltsView Answer on Stackoverflow
Solution 3 - JavawebpatView Answer on Stackoverflow
Solution 4 - JavaBasil BourqueView Answer on Stackoverflow
Solution 5 - JavaVadzimView Answer on Stackoverflow
Solution 6 - JavadbowView Answer on Stackoverflow
Solution 7 - JavapickypgView Answer on Stackoverflow
Solution 8 - JavaChanaka FernandoView Answer on Stackoverflow
Solution 9 - JavaAshish TiwariView Answer on Stackoverflow
Solution 10 - Javafunaquarius24View Answer on Stackoverflow
Solution 11 - JavaVadzimView Answer on Stackoverflow
Solution 12 - JavaRami SharaiyriView Answer on Stackoverflow
Solution 13 - JavaArtanisView Answer on Stackoverflow
Solution 14 - JavaDavid PhamView Answer on Stackoverflow
Solution 15 - JavaDulacosteView Answer on Stackoverflow
Solution 16 - JavaAlejandro Teixeira MuñozView Answer on Stackoverflow
Solution 17 - JavajujuBeeView Answer on Stackoverflow