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 java.sql.Timestamp(0);
利用泛型设计toUtil()方法:
public static <T extends java.util.Date> java.util.Date toUtil(T t){ java.util.Date date = t; return date; }
2、util时间类型转sqll时间类型
原理:通过java.util.Date类的getTime()方法可以轻而易举的获得当前时间的毫秒数,这个long类型的数据至关重要,是实例化三个sql时间类型的构造器必要参数。
即:
long millionSeconds = java.util.Date.getTime();
java.sql.Date sDate = new java.sql.Date(millionSeconds);
或: java.sql.Time sTime = new java.sql.Time(millionSeconds);
或: java.sql.Timestamp sTimestamp = new java.sql.Timestamp(millionSeconds);
利用泛型设计toSql()方法:
首先设计一个枚举类Type:
enum Type { DATE, TIME, TIMESTAMP }
其中规定了从toSql()方法中要获取的sql时间类型:DATE对应java.sql.Date,TIME对应java.sql.Time,TIMESTAMP对应java.sql.Timestamp。
public static <T extends java.util.Date> T toSql(java.util.Date utilDate, Type type) { T t = null; long millionSeconds = utilDate.getTime(); switch (type) { case DATE: t = (T) new java.sql.Date(millionSeconds); break; case TIME: t = (T) new java.sql.Time(millionSeconds); break; case TIMESTAMP: t = (T) new java.sql.Timestamp(millionSeconds); break; default: break; } return t; }
java在设计Date类时先设计了util中的Date,随着各大数据库的出现,原先的Date类型无法满足数据库中所保存的时间类型,这才衍生出了sql中的各种时间类,对Mysql数据库的支持使得java.sql.Date、java.sql.Time、java.sql.Timestamp应运而生。呵呵,这只是我个人的理解而已。