java.sql.date与java.util.date区别?

 我来答
匿名用户
2013-07-25
展开全部
JAVA里提供的日期和时间类,java.sql.Date和java.sql.Time,只会从数据库里读取某部分值,这有时会导致丢失数据。例如一个包含2002/05/22 5:00:57 PM的字段,读取日期时得到的是2002/05/22,而读取时间时得到的是5:00:57 PM.
你需要了解数据库里存储时间的精度。有些数据库,比如MySQL,精度为毫秒,然而另一些数据库,包括Oracle,存储SQL DATE类型数据时,毫秒部分的数据是不保存的。以下操作中容易出现不易被发现的BUG:获得一个JAVA里的日期对象。
从数据库里读取日期
试图比较两个日期对象是否相等。如果毫秒部分丢失,本来认为相等的两个日期对象用Equals方法可能返回false。.sql.Timestamp类比java.util.Date类精确度要高。这个类包了一个getTime()方法,但是它不会返回额外精度部分的数据,因此必须使用getNanos()方法。有毫微秒部分(即额外精度部分)的数值可能比没有这个部分的数值的大一个毫秒。如果你知道你使用的数据库保存了毫秒部分,可以用下面的代码获得的数值:
long time=timestamp.getTime()+timestamp.getNanos()/1000000;
毫微秒的部分就是为什么一个java.sql.Timestamp对象不等于一个java.util.Date对象,而一个java.util.Date对象可能等于一个java.sql.Timestamp对象的原因。这使得equals方法应当保持的对称被打破了。使用java.sql包中的时间相关的类是重要的,但是它们也可能导致人为的错误。这是因为,这些类的复杂性虽然已经在javadoc里面清楚的描述了,但是由于这些类看上去很简单而很少有人看这些文档。
308xiaobao
高粉答主

2017-07-19 · 每个回答都超有意思的
知道大有可为答主
回答量:2.6万
采纳率:95%
帮助的人:2694万
展开全部
  1. java.util.Date 就是在除了SQL语句的情况下使用。
    java.sql.Date 是针对SQL语句使用的,它只包含日期而没有时间部分,它都有getTime方法返回毫秒数,自然就可以直接构建
    java.util.Date d = new java.util.Date(sqlDate.getTime());


  2. java.util.Date 是 java.sql.Date 的父类
    前者是常用的表示时间的类,我们通常格式化或者得到当前时间都是用他。后者之后在读写数据库的时候用他,因为PreparedStament的setDate()的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date 
    转换是
    java.sql.Date date=new Java.sql.Date();
    java.util.Date d=new java.util.Date (date.getTime());
    反过来是一样的


  3. 继承关系:java.lang.Object --》 java.util.Date --》 java.sql.Date
    具体的转换关系就是java.util.Date d=new java.util.Date (new Java.sql.Date());


已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友59414f75
2018-07-29 · 知道合伙人软件行家
百度网友59414f75
知道合伙人软件行家
采纳数:422 获赞数:1663
淘宝5年运营经验 2年化妆品包装经验 5年SEO经验 6年电商经验 亚马逊运营

向TA提问 私信TA
展开全部

两者区别如下:

java.util.Date是在除了SQL语句的情况下面使用的。
java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分


它们都有getTime方法返回毫秒数,自然就可以直接构建。 

java.util.Date 是 java.sql.Date 的父类,前者是常用的表示时间的类,我们通常格式化或者得到当前时间都是用它,后者之后在读写数据库的时候用它。


互相转化方法如下:

  1. java.sql.Date转为java.util.Date
    java.util.Date d=new java.util.Date (date.getTime());


  2. java.util.Date转为java.sql.Date
    java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
青年节奏
2017-08-03 · TA获得超过222个赞
知道答主
回答量:164
采纳率:81%
帮助的人:20.3万
展开全部
  1. 类 java.util.Date表示特定的瞬间,精确到毫秒。 

  2. java.sql.Date一个包装了毫秒值的瘦包装器 (thin wrapper),它允许 JDBC 将毫秒值标识为 SQL DATE 值。毫秒值表示自
    1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。为了与 SQL DATE 的定义一致,由 java.sql.Date
    实例包装的毫秒值必须通过将小时、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。 

  3. java.sql.Date为 java.util.Date的一个子类,继承了java.util.Date中的方法,只不过两者的tostring()不同, java.sql.Date对其惊醒了重写,java.util.Date把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz
    yyyy 输出,而 java.sql.Date 则格式化日期转义形式 yyyy-mm-dd 的日期。

  4. sql.date对应数据库中的date类型,而父类util.date为Java里的对象类型

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dhweicheng
2017-07-06 · TA获得超过1155个赞
知道大有可为答主
回答量:3320
采纳率:55%
帮助的人:1057万
展开全部
java.sql.Date只包含年月日信息
java.util.Date 包含年月日时分秒毫秒
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式