java.sql.date与java.util.date区别?
2013-07-25
你需要了解数据库里存储时间的精度。有些数据库,比如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里面清楚的描述了,但是由于这些类看上去很简单而很少有人看这些文档。
java.util.Date 就是在除了SQL语句的情况下使用。
java.sql.Date 是针对SQL语句使用的,它只包含日期而没有时间部分,它都有getTime方法返回毫秒数,自然就可以直接构建
java.util.Date d = new java.util.Date(sqlDate.getTime());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());
反过来是一样的继承关系:java.lang.Object --》 java.util.Date --》 java.sql.Date
具体的转换关系就是java.util.Date d=new java.util.Date (new Java.sql.Date());
2018-07-29 · 知道合伙人软件行家
两者区别如下:
java.util.Date是在除了SQL语句的情况下面使用的。
java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分
它们都有getTime方法返回毫秒数,自然就可以直接构建。
java.util.Date 是 java.sql.Date 的父类,前者是常用的表示时间的类,我们通常格式化或者得到当前时间都是用它,后者之后在读写数据库的时候用它。
互相转化方法如下:
java.sql.Date转为java.util.Date
java.util.Date d=new java.util.Date (date.getTime());java.util.Date转为java.sql.Date
java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());
类 java.util.Date表示特定的瞬间,精确到毫秒。
java.sql.Date一个包装了毫秒值的瘦包装器 (thin wrapper),它允许 JDBC 将毫秒值标识为 SQL DATE 值。毫秒值表示自
1970 年 1 月 1 日 00:00:00 GMT 以来经过的毫秒数。为了与 SQL DATE 的定义一致,由 java.sql.Date
实例包装的毫秒值必须通过将小时、分钟、秒和毫秒设置为与该实例相关的特定时区中的零来“规范化”。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 的日期。sql.date对应数据库中的date类型,而父类util.date为Java里的对象类型
java.util.Date 包含年月日时分秒毫秒