java.util.date是java.sql.date的父类,其中java.util.date用于除了数据库以外的任何地方(实际上也可以用于数据库)。两者都有getTime的方法(获取long类型)。所以可以互相转换
java.sql.date date_sql = new java.sql.date(System.currentTime()); java.util.date date = new java,util.date(date_sql.getTime());
反过来转换也是一样的。
另一种转换时:
java.util.date date = new java.util.date(date_sql);//用子类创建父类
preparement中getDate()与setDate(datesql)中返回与传入的参数都是java.sql.date,所以要先进行转换
java.sql.date 没有无参的构造函数,必须传值,java.util.date可以使用无参构造函数,获取的是当前的时间
java.sql.date的时间格式是年-月-日,没有时间部分。
强制从datesql获取时分秒,会抛异常。
但是不代表没有时间部分的精度。
datesql.getTime() == date.getTime() //true
两个对象都能进行格式化,使用类SimpleDateFormat
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss"); java.util.Date date = new java.util.Date(); System.out.println(simpleDateFormat.formate(date)); java.sql.Date dateSql = new java.sql.Date(date.getTime()); System.out.println(simpleDateFormat.formate(dateSql)); // 通过format转换后可以显示时分秒
注:java.sql.date 通过格式化后可以显示时分秒,也就是他时分秒的精度并没有丢失
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 输出。
总结:
正因为他们之间有继承的关系,所以实际上,在JDBC与数据库交互的时候,用哪一个Date都是可以的,只是侧重点不同而已。 (实际上项目中大部分还是用util包中的Date)