一、两者间的关系
java.sql.Date是java.util.Date的子类
二、两者关于时间显示的区别
long date=1603526787918L;
//java.util.Date
Date date1 = new Date(date);
//java.sql.Date
java.sql.Date date2 = new java.sql.Date(date);
System.out.println(date1); //Sat Oct 24 16:06:27 CST 2020
System.out.println(date2); //2020-10-24
我们可以看到,java.util.Date类输出的时间包含年月日及时分秒,而java.sql.Date输出的时间仅有年月日。这是因为java.sql包下的Date仅表示日期,只有年月日,没有时分秒,因此会丢失时间。
若开发中传来的是时间戳,而后端不小心将Date包引入成java.sql,将会发生时间丢失问题,可能会导致查询数据出现误差。
三、java.sql包下的三个与数据库相关的日期时间类型
Date:表示日期,只有年月日,没有时分秒。会丢失时间;
Time:表示时间,只有时分秒,没有年月日。会丢失日期;
Timestamp:表示时间戳,有年月日时分秒,以及毫秒。
long date=1603526787918L;
//java.util.Date
Date date1 = new Date(date);
//java.sql.Date
java.sql.Date date2 = new java.sql.Date(date);
//java.sql.Time
Time time = new Time(date);
//java.sql.Timestamp
Timestamp timestamp = new Timestamp(date);
System.out.println(date1); //Sat Oct 24 16:06:27 CST 2020
System.out.println(date2); //2020-10-24
System.out.println(time); //16:06:27
System.out.println(timestamp); //2020-10-24 16:06:27.918
四、时间转换
- java.util.Date转java.sql.Date
java.util.Date d = new java.util.Date();
java.sql.Date date = new java.sql.Date(d.getTime());//会丢失时分秒
Time time = new Time(d.getTime()); //会丢失年月日
Timestamp timestamp = new Timestamp(d.getTime());
System.out.println(date); //2020-10-24
System.out.println(time); //17:05:58
System.out.println(timestamp); //2020-10-24 17:05:58.308