主要寫一些與數(shù)據(jù)庫(kù)連接時(shí)的日期處理,pstmt.setDate()的類型是java.sql.Date類型,這種符合規(guī)范的類型其實(shí)并沒(méi)有把時(shí)分秒存進(jìn)數(shù)據(jù)庫(kù),所以存取時(shí)就應(yīng)該用setTimestamp()或getTimestamp()。
整理一:
java.sql.Date 只存儲(chǔ)日期數(shù)據(jù)不存儲(chǔ)時(shí)間數(shù)據(jù)
// 會(huì)丟失時(shí)間數(shù)據(jù)
preparedStatement.setDate(1, new java.sql.Date(date.getTime()));
//可以這樣來(lái)處理
preparedStatement.setTimestamp(1, new Timestamp(new java.util.Date().getTime()));
//想要得到完整的數(shù)據(jù),包括日期和時(shí)間,可以這樣
java.util.Date d = resultSet.getTimestamp(1);
//這樣處理更合適一些,可以避免一些潛在Timestamp 問(wèn)題
java.util.Date d = new java.util.Date(resultSet.getTimestamp(1).getTime());
往數(shù)據(jù)庫(kù)存儲(chǔ)的時(shí)候可以接收 java.util.Date類型 再用getTime()方法得到代表那個(gè)Date對(duì)象的long值,再以這個(gè)long值構(gòu)造一個(gè)Timestamp對(duì)象 存進(jìn)數(shù)據(jù)庫(kù)中。
從存數(shù)據(jù)庫(kù)里取的時(shí)候,可以先得到Timestamp用他的getTime()方法得到long值,再以這個(gè)long值構(gòu)造一個(gè) java.util.Date對(duì)象,這樣就可以對(duì)這個(gè)Date對(duì)象操作了。比如說(shuō) new SimpleDateFormat("yyyyy-MM-dd HH:mm:ss").format(Date)或format(Timestamp)都行~
整理二:
用Timestamp來(lái)記錄日期時(shí)間還是很方便的,但有時(shí)候顯示的時(shí)候是不需要小數(shù)位后面的毫秒的,這樣就需要在轉(zhuǎn)換為String時(shí)重新定義格式。
String轉(zhuǎn)化為Timestamp:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//定義格式,不顯示毫秒
Timestamp now = new Timestamp(System.currentTimeMillis());
//獲取系統(tǒng)當(dāng)前時(shí)間
String str = df.format(now);
String轉(zhuǎn)化為Timestamp:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");
String time = df.format(new Date());
Timestamp ts = Timestamp.valueOf(time);
整理三:
在 ResultSet中我們經(jīng)常使用的setDate或getDate的數(shù)據(jù)類型是java.sql.Date,而在平時(shí)java程序中我們一般習(xí)慣使用 java.util.Date。因此在DAO層我們經(jīng)常會(huì)碰到這倆種數(shù)據(jù)類型的相互轉(zhuǎn)換。
兩者的關(guān)系
java.lang.Object
|
+---java.util.Date
|
+----java.sql.Date
相互轉(zhuǎn)換
1. 使用getTime()函數(shù)
這兩個(gè)類都提供了getTime()函數(shù),用于返回對(duì)應(yīng)的毫秒數(shù)(long類型)。利用這個(gè)函數(shù)可以實(shí)現(xiàn)轉(zhuǎn)換:
java.util.Date utilDate = new java.util.Date(sqlDate.getTime()); // sql -> util
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); // util -> sql
2. 使用SimpleDateFormat類實(shí)現(xiàn)轉(zhuǎn)換
SimpleDateFormat 是一個(gè)以國(guó)別敏感的方式格式化和分析數(shù)據(jù)的具體類。 它允許格式化 (date -> text)、語(yǔ)法分析 (text -> date)和標(biāo)準(zhǔn)化。
SimpleDateFormat dateFormat = new SimpleDateFormate("yyyy-MM-dd HH:mm:ss");
java.util.Date utilDate = dateFormat.parse(sqlDate.toString());
3. 直接轉(zhuǎn)換
由于java.sql.Date是從java.util.Date中繼承過(guò)來(lái)的,所以可以直接用:
utilDate = sqlDate;
4. 另類獲得日期的方法:
SimpleDateFormat sy=new SimpleDateFormat("yyyy");
SimpleDateFormat sm=new SimpleDateFormat("MM");
SimpleDateFormat sd=new SimpleDateFormat("dd");
String syear=sy.format(date);
String smon=sm.format(date);
String sday=sd.format(date);
ps:1. java.util.Date類中的getYear()要加上1900才可得到實(shí)際值,getMonth()則要加上1。
2. 字符串到Date的轉(zhuǎn)換: Date.valueOf(str),記得引包的時(shí)候要引sql的Date包,不是util的Date包
3. 字符串到Timestamp 的轉(zhuǎn)換Timestamp ts = Timestamp.valueOf(time);