zoukankan      html  css  js  c++  java
  • java.sql.Date和java.util.Date的不同和相互转换方式

    一:前言

        这是我在新的公司写的第一份博客吧,来了又一个星期了吧,但是在来的那几天我真的很迷茫的感觉这里是很不适合我的样子,而且我又是来实习的,我很不愿意啊,自己做的又是java web,最原始的servlet,代码和混乱,这让我很无奈啊,所以我在星期一的时候开始提出辞职,然后老大找我谈了谈,说这个项目是我们外包给别人的,我们只是在他们没空的时候改一改罢了,这样说至少让我感觉到还可以接受,最后我又提了下我自己不想实习,提高工资的事情也通过了,公司的干事效率还是很高的啊。虽然做的是servlet,但是这个东西还是又学到了一些其他知识。现在我们就想说下。

    二:内容

       自己在做servlet的时候,比如说我们的vo中有一个birthday字段,是Date类型, 我们在从数据库取出Date类型的数据时,rs.getDate(1)的时候我们取到的其实是一个java.sql.Date类型的日期,你直接设置到vo类中也是行的,但是我是在把其转换为JSON数据时遇到了问题。报如下的错误;

     1 net.sf.json.JSONException: java.lang.reflect.InvocationTargetException
     2     at net.sf.json.JSONObject._fromBean(JSONObject.java:987)
     3     at net.sf.json.JSONObject.fromObject(JSONObject.java:168)
     4     at net.sf.json.AbstractJSON._processValue(AbstractJSON.java:265)
     5     at net.sf.json.JSONObject._processValue(JSONObject.java:2808)
     6     at net.sf.json.JSONObject.processValue(JSONObject.java:2874)
     7     at net.sf.json.JSONObject.setInternal(JSONObject.java:2889)
     8     at net.sf.json.JSONObject.setValue(JSONObject.java:1577)
     9     at net.sf.json.JSONObject._fromBean(JSONObject.java:934)
    10     at net.sf.json.JSONObject.fromObject(JSONObject.java:168)
    11     at net.sf.json.AbstractJSON._processValue(AbstractJSON.java:265)
    12     at net.sf.json.JSONArray._processValue(JSONArray.java:2514)
    13     at net.sf.json.JSONArray.processValue(JSONArray.java:2539)
    14     at net.sf.json.JSONArray.addValue(JSONArray.java:2526)
    15     at net.sf.json.JSONArray._fromCollection(JSONArray.java:1057)
    16     at net.sf.json.JSONArray.fromObject(JSONArray.java:123)
    17     at net.sf.json.JSONArray.fromObject(JSONArray.java:105)
    18     at com.statistics.servlet.StatisticsServlet.doGet(StatisticsServlet.java:60)
    19     at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
    20     at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    21     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    22     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    23     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    24     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    25     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    26     at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
    27     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    28     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    29     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    30     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    31     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
    32     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    33     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    34     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    35     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    36     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
    37     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
    38     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
    39     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
    40     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    41     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    42     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    43     at java.lang.Thread.run(Unknown Source)
    44 Caused by: java.lang.reflect.InvocationTargetException
    45     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    46     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    47     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    48     at java.lang.reflect.Method.invoke(Unknown Source)
    49     at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1773)
    50     at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1132)
    51     at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686)
    52     at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715)
    53     at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290)
    54     at net.sf.json.JSONObject._fromBean(JSONObject.java:918)
    55     ... 41 more
    56 Caused by: java.lang.IllegalArgumentException
    57     at java.sql.Date.getHours(Unknown Source)
    58     ... 51 more
    View Code

    我是断点调试的时候才知道是在转换的时候报了错误,最后发现是这个日期的原因。我会在下一篇http://www.cnblogs.com/wuhao1991/p/4172385.html写有关JSON转换的一些内容。自己现在找到了有四种转换JSON的方式或者jar吧。

    还是先说说日期转化的吧。

       刚刚看了下jdk的文档,才知道原来java.sql.Date是继承java.util.Date的

    可以看看其有的方法。下面我们看看代码

     1 package org.wh.DateDemo;
     2 
     3 import java.sql.Timestamp;
     4 import java.text.SimpleDateFormat;
     5 
     6 public class sqlDateDemo {
     7 
     8     public static void main(String[] args) {
     9         java.util.Date utilDate=new java.util.Date();
    10         System.out.println("util的date:"+utilDate);
    11         
    12         java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());
    13         System.out.println("sql的date:"+sqlDate);
    14         
    15         java.util.Date sTOu=new java.util.Date(sqlDate.getTime());
    16         System.out.println("sqlDate转化为UtilDate"+sTOu);
    17         
    18         
    19         Timestamp ts=new Timestamp(utilDate.getTime());
    20         System.out.println("Timestamp:"+ts);
    21         
    22         java.util.Date tTOu=new java.util.Date(ts.getTime());
    23         System.out.println("tTOu:"+tTOu);
    24         
    25         java.sql.Date sqlDate1=java.sql.Date.valueOf("2014-12-10");
    26         System.out.println(sqlDate1);
    27         
    28         SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    29         SimpleDateFormat f1=new SimpleDateFormat("yyyy");
    30         System.out.println("format后的数据:"+f.format(tTOu));
    31         System.out.println("format后的数据:"+f1.format(tTOu));
    32         
    33     }
    34 
    35 }
    View Code

    运行的结果如下:

    util的date:Thu Dec 18 14:58:53 CST 2014
    sql的date:2014-12-18
    sqlDate转化为UtilDateThu Dec 18 14:58:53 CST 2014
    Timestamp:2014-12-18 14:58:53.265
    tTOu:Thu Dec 18 14:58:53 CST 2014
    2014-12-10
    format后的数据:2014-12-18 02:58:53
    format后的数据:2014

    其实我自己一直在纠结Date日期的插入,如果数据库中的该字段是Date类型的话,那么比如插入今天的日期插入数据库后的数值就是“2014-12-18”,在java代码中不要非得转换为“yyyy-MM-dd”的类型,Date类型即可。

    如果在界面显示的时候可以用jstl的标签

    <fmt:formatDate value="${list.birthday}" pattern="yyyy-MM-dd"/>即可

    三:总结

      今天就得先交下有关毕业设计的名称,我自己好纠结啊,但是我突然又来灵感了,我要做一个充电桩的管理系统,因为最近也是公司在充电桩的控制,而且我前段时间也看到了“豪华车”特斯拉在中国的部署,大城市都配有有了充电桩的装置。亚洲有40多个,中国就有30多个充电桩,所以就做下统计吧。第二个标题就是做汽车管理系统吧。实在是没有什么可以做的了啊。

  • 相关阅读:
    项目管理5大过程组,42个过程一句话讲解
    在命令中输入信息创建maven项目
    《Maven应用实战》一书的在线学习网址和源码链接
    [转]使用Eclipse创建一个简单的servlet项目
    使用Maven客户端从Maven中心仓库下载到本地的jar包的默认存储位置及远程仓库
    ant利用ivy从maven仓库下载项目所依赖的jar包默认的存储位置
    Ant和Ivy集成部署和使用
    Ant入门简单实例
    TIBCO Jaspersoft Studio-6.12.2连接mysql时显示时区问题
    JAVA Swing日期选择控件datepicker的使用
  • 原文地址:https://www.cnblogs.com/wuhao1991/p/4171837.html
Copyright © 2011-2022 走看看