【发布时间】:2012-03-22 04:08:59
【问题描述】:
我有一个从数据库中获取的日期格式,它是一个字符串类型。它存储的值类似于“2012-03-04 00:00:00.0”,但我已将 SimpleDateFormat 声明为“dd-MMM-yyyy HH:mm:ss”,这在我的项目中是必需的。现在,每当我从数据库中检索一些带有日期的数据时,我都会得到一个解析异常,日志如下。
java.text.ParseException:无法解析的日期:“2012-03-04 00:00:00.0” 在 java.text.DateFormat.parse(未知来源) 在 com.tcs.tool.iris.aep.selfProfile.dao.AepSelfProfileDaoImpl$1.setValues(AepSelfProfileDaoImpl.java:1188) 在 org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:892) 在 org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:1) 在 org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:586) 在 org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:614) 在 org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:883) 在 com.tcs.tool.iris.aep.selfProfile.dao.AepSelfProfileDaoImpl.insertDataIntoActionItems(AepSelfProfileDaoImpl.java:1174) 在 com.tcs.tool.iris.aep.selfProfile.service.AepSelfProfileServiceImpl.insertDataIntoActionItems(AepSelfProfileServiceImpl.java:214) 在 com.tcs.tool.iris.aep.selfProfile.controller.UpdateProgressController.onSubmit(UpdateProgressController.java:48) 在 org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:272) 在 org.springframework.web.servlet.mvc.AbstractFormController.handleInvalidSubmit(AbstractFormController.java:675) 在 org.springframework.web.servlet.mvc.AbstractFormController.handleRequestInternal(AbstractFormController.java:275) 在 org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) 在 org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 在 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 在 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 在 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 在 java.lang.Thread.run(Unknown Source)
请帮我弄清楚这有什么问题。以及如何将其转换为正确的格式。
我得到异常的代码sn-p如下:-
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();
}
【问题讨论】:
-
你用什么格式解析?
-
请给我们很多更多上下文(和代码)。为什么在从数据库中获取值时要解析文本?为什么你没有得到作为日期的值?数据库中的数据类型是什么?
-
@Anony-Mousse 我已经更新了代码 sn-p。我只需要 yyyy-MM-dd HH:mm:ss 格式。数据库中yyyy-MM-dd HH:mm:ss.S格式的数据可以转换吗?
-
如果日期的格式是 yyyy-MM-dd HH:mm:ss,显然你将无法使用模式为 dd-MMM-yyyy HH:mm 的 DateFormat 解析它:ss。这就像用黑漆把汽车涂成白色。
-
您应该使用两种格式。请看我下面的回复。一个用于解析,第二个用于输出到您想要的格式。你想要字符串 -> 日期对象 -> 字符串