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

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。