首页 > 代码库 > java.util.Date 和Java.sql.Date、java.sql.Time、java.sql.Timestamp的互换

java.util.Date 和Java.sql.Date、java.sql.Time、java.sql.Timestamp的互换

 

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应运而生。呵呵,这只是我个人的理解而已。

 

java.util.Date 和Java.sql.Date、java.sql.Time、java.sql.Timestamp的互换