2 baidu 28843887 baidu_28843887 于 2015.06.25 14:23 提问

Java中使用SimpleDateFormat转换异常

异常代码:
String min = request.getParameter("minTime");
String max = request.getParameter("maxTime");
Date startTime = dateFormat.parse(dateFormat.format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(min)));

                Date stopTime = dateFormat.parse(dateFormat.format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(max)));

异常信息:
java.text.ParseException: Unparseable date: "6/1/2015 14:23:05"
at java.text.DateFormat.parse(DateFormat.java:357)
at com.pumandai.cps.controller.CpsController.toCpsLists(CpsController.java:126)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
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.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
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(Thread.java:745)

4个回答

tongyi55555
tongyi55555   2015.06.25 14:36
已采纳

java.text.ParseException: Unparseable date: "6/1/2015 14:23:05"
异常已经说明了你传入的日期格式与你定义的格式yyyy-MM-dd HH:mm:ss不符合,你传入的应该是2015-06-01 14:23:05才行。

不明白为什么你要用三次dateformat,new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(min)不就可以得到Date对象了么?

tongyi55555
tongyi55555 回复baidu_28843887: Date是没有格式的,输出的格式是通过new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")里面的参数来定义的
2 年多之前 回复
baidu_28843887
baidu_28843887 谢谢您了,这么仔细的讲解。不好意思的是自己没有C币给你。反正还是感谢您的解答!谢谢
2 年多之前 回复
baidu_28843887
baidu_28843887 回复那一抹代码: 菜鸟一枚。不怎么懂。SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 这样就可以获取到一个yyyy-MM-dd HH:mm:ss格式的Date了吗?
2 年多之前 回复
tongyi55555
tongyi55555 回复baidu_28843887: 你搞混了吧,你穿进去的不就是字符串么,你需要将字符串转成Date。你现在输出的是Date对象默认的toString方法,带CST的。
2 年多之前 回复
baidu_28843887
baidu_28843887 回复那一抹代码: 刚才试过了。先转成String后没问题输出:2015-06-01 16:24:53。但是当String转成Date值变成了Mon Jun 01 16:24:53 CST 2015请问有什么解决办法吗?
2 年多之前 回复
tongyi55555
tongyi55555 回复baidu_28843887: 怎么就说不明白呢。你传进来的是一个字符串,需要将其转化为Date对象,因为传入的格式是MM/dd/yyyy,因此要先用这个格式的dateformat进行转换,转换之后就得到了Date对象,用一次就可以拿到Date startTime 了,至于你以后怎么使用这个对象,怎么往数据库里放跟这个Date对象没有关系,他就是一个日期对象,存储到数据库时如果传的是日期字符串,你再将其转换成想要的形式就可以了。
2 年多之前 回复
baidu_28843887
baidu_28843887 回复那一抹代码: 那不就跟我一开始写的一样了吗?
2 年多之前 回复
baidu_28843887
baidu_28843887 回复那一抹代码: 就是说先转成 MM/dd/yyyy的格式后然后在用dateFormat转成数据库需要的类型吗?
2 年多之前 回复
tongyi55555
tongyi55555 回复baidu_28843887: 哦明白你的意思了,你先把传入的字符串转换为date类型的,用MM/dd/yyyy形式的,有了date对象后你就可以把它转换为你想要的数据库中的形式了。
2 年多之前 回复
baidu_28843887
baidu_28843887 回复那一抹代码: 但是我数据库的格式是yyyy-MM-dd HH:mm:ss 的。如果换成你说的这种格式还能查到数据吗
2 年多之前 回复
tongyi55555
tongyi55555 回复baidu_28843887: new SimpleDateFormat("MM/dd/yyyy HH:mm:ss")换成这个
2 年多之前 回复
baidu_28843887
baidu_28843887 我一开始也是就用一次dateFormat的但是一直异常就这么写了。因为我用的是easyUI-datetimebox,页面获取的就是“6/1/2015 14:23:05”请问如何解决?
2 年多之前 回复
YanXunZhuang_10231
YanXunZhuang_10231   2015.06.25 14:55

直接 使用一次将字符串转换为Date类型就可以了吧

baidu_28843887
baidu_28843887 因为我用的是easyUI-datetimebox,页面获取的就是“6/1/2015 14:23:05”请问如何解决?
2 年多之前 回复
tongyi55555
tongyi55555   2015.06.25 17:05

你看下这个代码:

private static void strDateStr() {
        String dateStr = "6/1/2015 14:23:05";

        // String转换为Date,格式字符串必须与上面传入的日期字符串对应,不然会报ParseException
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        try {
            Date date = sdf.parse(dateStr);
            // 输出date日期,调用date的默认打印方法
            System.out.println("默认的日期输出格式:" + date);

            // 格式化date的输出样式,需要指定想要的格式,比如输出2015-06-01 12:11:11格式的
            SimpleDateFormat outSdf = new SimpleDateFormat(
                    "yyyy-MM-dd HH:mm:ss");
            String outDateStr = outSdf.format(date);
            System.out.println("格式化后的日期输出格式:" + outDateStr);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

输出的内容为:

 默认的日期输出格式Mon Jun 01 14:23:05 CST 2015
格式化后的日期输出格式:2015-06-01 14:23:05
dongxurr123
dongxurr123   2015.10.13 23:14

初始化SimpleDateFormat时使用的格式字符串与你传入的日期格式不一致。

Csdn user default icon
上传中...
上传图片
插入图片