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

我是断点调试的时候才知道是在转换的时候报了错误,最后发现是这个日期的原因。我会在下一篇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 }

运行的结果如下:

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多个充电桩,所以就做下统计吧。第二个标题就是做汽车管理系统吧。实在是没有什么可以做的了啊。

时间: 2024-08-07 04:30:20

java.sql.Date和java.util.Date的不同和相互转换方式的相关文章

java.util.Date 和Java.sql.Date、java.sql.Time、java.sql.Timestamp的互换

1.sql时间类型转util时间类型 原理:java.sql.Date.java.sql.Time.java.sql.Timestamp三个类都是java.util.Date的子类,故根据多态的设计原理,父类引用指向子类对象,可以直接转换. 即: java.util.Date uDate = new java.sql.Date(0); 或: java.util.Date uDate = new java.sql.Time(0); 或: java.util.Date uDate = new jav

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结 转

java.util.Date.java.sql.Date.java.sql.Time.java.sql.Timestamp区别和总结 java.lang.Object ....|__java.util.Date ..........|__java.sql.Date/java.sql.Timestamp /java.sql.Time [父类]java.util.Date日期格式为:年月日时分秒 [子类]java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据] [子类]java.

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和联系

参考:链接 在Web开发中,避免不了对日期的操作,常用的关于时间的类有这么几个: java.util.Date.java.sql.Date.java.sql.Time.java.sql.Timestamp,这几个类在JDK的定义如下所示: java.lang.Object -.|__java.util.Date ---.|__java.sql.Date/java.sql.Timestamp/java.sql.Time -.|__java.security.Timestamp java.util.

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结

final SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US);//dd/MM/yyyy final Date now = new Date(); System.out.println(now); final String strDate = sdfDate.format(now); System.out.println(strDate); final Timesta

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结

java.sql.Date.java.sql.Timestamp区别和总结 java.lang.Object ....|__java.sql.Date/java.sql.Time [父类]java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据] [子类]java.sql.Timestamp日期格式为:年月日时分秒纳秒(毫微秒) 针对不同的数据库选用不同的日期类型 ·Oracle的Date类型,只需要年月日,选择使用java.sql.Timestamp类型 ----------

解决Apache CXF 不支持传递java.sql.Timestamp和java.util.HashMap类型问题

在项目中使用Apache开源的Services Framework CXF来发布WebService,CXF能够很简洁与Spring Framework 集成在一起,在发布WebService的过程中,发布的接口的入参有些类型支持不是很好,比如Timestamp和Map.这个时候我们就需要编写一些适配来实行类型转换. TimestampAdapter.java package com.loongtao.general.crawler.webservice.utils; import java.s

java中时间类(util Date)的后延与前推处理

当后延或者前推的天数在一定时间之内时,可以用以下方法处理 public static Date  getValidEndTime(Date date,int validDayCount){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String datestr = sdf.format(date); try { date = sdf.parse(datestr); } catch (ParseException

java.sql.preparedstatement和java.sql.statement的区别

本文转自CSDN,然后整理了一遍.原文出处:CSDN JDBC(java database connectivity,java数据库连接)的api中的主要的四个类之一的java.sql.statement要求开发者付出大量的时间和精力.在使用statement获取JDBC访问时所具有的一个共通的问题是输入适当格式的日期和时间戳:2002-02-0520:56 或者 02/05/02 8:56 pm. 通过使用java.sql.preparedstatement,这个问题可以自动解决.一个prep

java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间

java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.Date的子类,是一个包装了毫秒值的瘦包装器,允许 JDBC 将毫秒值标识为 SQL DATE 值.毫秒值表示自 1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数. 为了与 SQL DATE 的定义一致,由 java.sql.Date 实例包装的毫秒值必须通过将时间.分钟.秒和毫

java.util.Date与java.sql.Date

我数据库里用到了日期类型.用java编程的时候同时import了java.util.*和java.sql.*,发现直接申明Date类型 Date dt; 会报错,查了一下才发现有java.util.Date和java.sql.Date,在定义日期类型的时候要使用全名,就是像这样: java.util.Date udt; java.sql.Date sdt; 然后我就查java.util.Date和java.sql.Date的区别和用法,这方面网上资料挺全,我就不赘述了,大致区别就是java.ut