How to convert "2012-03-04 00: 00: 00.0" to Date with Format "dd-mm-yyyy HH: mm: ss" Using Java

I have a date format that I get from the database and is a string type. It has a meaning that is similar to "2012-03-04 00: 00: 00.0", but I declared SimpleDateFormat as "dd-MMM-yyyy HH: mm: ss", which is necessary in my project. Now, when I get some data along with the date from the database, I get the parsing with the log as shown below.

java.text.ParseException: Unparseable date: "2012-03-04 00:00:00.0" at java.text.DateFormat.parse(Unknown Source) at com.tcs.tool.iris.aep.selfProfile.dao.AepSelfProfileDaoImpl$1.setValues(AepSelfProfileDaoImpl.java:1188) at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:892) at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:1) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:586) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:614) at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:883) at com.tcs.tool.iris.aep.selfProfile.dao.AepSelfProfileDaoImpl.insertDataIntoActionItems(AepSelfProfileDaoImpl.java:1174) at com.tcs.tool.iris.aep.selfProfile.service.AepSelfProfileServiceImpl.insertDataIntoActionItems(AepSelfProfileServiceImpl.java:214) at com.tcs.tool.iris.aep.selfProfile.controller.UpdateProgressController.onSubmit(UpdateProgressController.java:48) at org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:272) at org.springframework.web.servlet.mvc.AbstractFormController.handleInvalidSubmit(AbstractFormController.java:675) at org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:275) at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source) 

Please help me figure this out. And how to convert it to the correct format.

The code snippet in which I get the exception is as follows: -

 SimpleDateFormat sdf = new SimpleDateFormat( "dd-MMM-yyyy HH:mm:ss"); Calendar currenttime = Calendar.getInstance(); java.util.Date currentdate = currenttime.getTime(); String currentDateInsert = sdf.format(currentdate); CommentNActionItem commentAndAction = commentActionItem .get(i); java.util.Date datefromDb = null; try { @SuppressWarnings("unused") Date dateF=sdf.parse(commentAndAction.getCreatedDate()); datefromDb = (java.sql.Date)sdf.parseObject(commentAndAction.getCreatedDate()); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); 

}

+6
source share
8 answers

The process of converting date strings is quite simple. You determine the input format, use it to parse the source string, then define the output format and use it to convert to a string.

I get the impression that you are trying to shorten this by reusing the same format for parsing and output? Use two formats , then!

 // Convert input string into a date DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); Date date = inputFormat.parse(inputString); // Format date into output format DateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); String outputString = outputFormat.format(date); 
+16
source

The year comes first and you need to parse the millisecond. I added an answer to show a simple dateformat conversion:

  SimpleDateFormat in = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); SimpleDateFormat out = new SimpleDateFormat("dd-MM-yy HH:mm:ss"); Date date = in.parse("2012-03-04 11:09:00.123"); String result = out.format(date); System.out.println(result); 
+2
source

TL; DR

 LocalDateTime.parse( "2012-03-04 00:00:00.0".replace( " " , "T" ) ).format( DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ) 

java.time

Other answers use the nasty old time classes, which are now obsolete, completely superseded by modern java.time classes. For earlier Android, see Recent Bullets below.

Parse as a LocalDateTime object, since your input does not contain any timezone or LocalDateTime offset.

 String input = "2012-03-04 00:00:00.0".replace( " " , "T" ) ; LocalDateTime ldt = LocalDateTime.parse( input ) ; 

If you really don't care about fractional seconds, chop it off.

 LocalDateTime ldtTruncated = ldt.truncatedTo( ChronoUnit.SECONDS ) ; 

Specify your own format to use when creating a string to represent this value.

 DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss" ) ; String output = ldtTruncated.format( f ) ; 

Dump for the console.

 System.out.println( "input: " + input ) ; System.out.println( "ldt: " + ldt ) ; System.out.println( "ldtTruncated: " + ldtTruncated ) ; System.out.println( "output: " + output ) ; 

See this code run on IdeOne.com .

input: 2012-03-04T00: 00: 00.0

ldt: 2012-03-04T00: 00

ldtTruncated: 2012-03-04T00: 00

: 2012-03-04 00:00:00


About java.time

The java.time framework is built into Java 8 and later. These classes supersede the nasty old legacy time classes such as java.util.Date , Calendar and SimpleDateFormat .

The Joda-Time project, now in maintenance mode , we recommend switching to the java.time classes.

To learn more, see the Oracle Tutorial . And search for qaru for many examples and explanations. JSR 310 specification .

Where to get java.time classes?

+1
source

Try using the correct format (order, M per month) and add a template for milliseconds:

 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); 
0
source

check this code .. You can convert string format to date format using SimpleDateFormat

 public static final String DATE_TIME_FORMAT = "yyyy-MM-dd hh:mm aa "; SimpleDateFormat dateTimeFormat = new SimpleDateFormat(DATE_TIME_FORMAT); Date date = null; try { String date_time_string="2012-03-01 21:15 am"; date = dateTimeFormat.parse(date_time_string); } catch (java.text.ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } 
0
source

I think this is the code you are looking for:

  String dateString = "2012-03-04 00:00:00.0"; DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.S"); DateFormat outputFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss"); Date date = inputFormat.parse(dateString); System.out.println(outputFormat.format(date)); 
0
source

You can use this class:

 import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.text.ParseException; /** * Helper class for handling ISO 8601 strings of the following format: * "2008-03-01T13:00:00+01:00". It also supports parsing the "Z" timezone. */ public final class ISO8601 { /** Transform Calendar to ISO 8601 string. */ public static String fromCalendar(final Calendar calendar) { Date date = calendar.getTime(); String formatted = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(date); return formatted.substring(0, 22) + ":" + formatted.substring(22); } /** Get current date and time formatted as ISO 8601 string. */ public static String now() { return fromCalendar(GregorianCalendar.getInstance()); } /** Transform ISO 8601 string to Calendar. */ public static GregorianCalendar toCalendar(final String iso8601string) throws ParseException { GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar.getInstance(); String s = iso8601string; Date date = null; try{ s=s.replace("Z", "+00:00"); try { s = s.substring(0, 26) + s.substring(27); } catch (IndexOutOfBoundsException e) {} date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").parse(s); }catch(Exception tc) { s=s.replace("Z", "+00:00"); try { s = s.substring(0, 22) + s.substring(23); } catch (IndexOutOfBoundsException e) {} date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(s); } calendar.setTime(date); return calendar; } } 
0
source

Date format with the name of the day of the week in Java Android

 Input: 2017-08-02T12:54:54+04:00 you are required to show results like: Output: Wednesday August 2, 2017 12:54 pm public static String getDateFormat(String date){ String input_date= date; //incase you are getting format 2017-08-02T12:54:54+04:00 you need to // replace T with " " doing so String input_date = date.replace("T",""); SimpleDateFormat format1=new SimpleDateFormat("yyyy-MM-dd HH:mm"); Date dt1= null; try { dt1 = format1.parse(input_date); } catch (ParseException e) { e.printStackTrace(); } DateFormat format2=new SimpleDateFormat("EEEE"); String finalDay=format2.format(dt1); String stringDate = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.SHORT).format(dt1); // for seconds removal use DateFormat.SHORT in second parameter return finalDay+"\n"+stringDate; } 
0
source

Source: https://habr.com/ru/post/909930/


All Articles