標籤:style blog io color os java sp 資料 div
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的互換