在Oracle數(shù)據(jù)庫(kù)中時(shí)間的存儲(chǔ)和讀取(讀取時(shí)、分、秒)
一般數(shù)據(jù)庫(kù)中時(shí)間的格式為DATE類(lèi)型,而我們從頁(yè)面中獲取的時(shí)間往往為String類(lèi)型,這個(gè)就需要類(lèi)型的轉(zhuǎn)換。一般我們會(huì)通過(guò)調(diào)用java.text.SimpleDateFormat JAVA類(lèi)來(lái)對(duì)其進(jìn)行轉(zhuǎn)換。這個(gè)JAVA類(lèi)中我們經(jīng)常用到的方法有兩個(gè),一個(gè)是format(將時(shí)間格式的數(shù)據(jù)轉(zhuǎn)換成String類(lèi)型),另一個(gè)就是parse(將String類(lèi)型轉(zhuǎn)換成DATE類(lèi)型)。我們一般可以將parse封裝到自己的方法中,例:
/** * 方法描述:頁(yè)面中字符串轉(zhuǎn)化為日期類(lèi)型 * * 輸入?yún)?shù):從頁(yè)面中得到的以字符串形式表示的日期數(shù)據(jù) * 輸出參數(shù):轉(zhuǎn)換后的日期 */
Public class TimeExh{ public static Date transToDate(String strDateFromPage) { Date date = null;
//此處為yyyy-MM-dd 則為2005-1-13 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //建立一個(gè)一定格式的 SimpleDateFormat if(strDateFromPage==null) { return new Date(); } if (strDateFromPage.length()>10) { sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //此處時(shí)間方式為2005-1-13 20:00:12 } try { date = sdf.parse(strDateFromPage); } catch (Exception ex) { ex.printStackTrace(); } return date; } }
在Oracle數(shù)據(jù)庫(kù)中提供了to_date的方法來(lái)對(duì)String類(lèi)型的時(shí)間來(lái)進(jìn)行轉(zhuǎn)換。而在Oracle數(shù)據(jù)庫(kù)中不能將時(shí)間直接放到VO中傳給數(shù)據(jù)庫(kù),這樣數(shù)據(jù)庫(kù)中的時(shí)間為格林氏時(shí)間,不符合中國(guó)人的時(shí)間習(xí)慣。所以在這里有兩中不同的處理方式進(jìn)行處理。
第一種:VO中存儲(chǔ)時(shí)間的類(lèi)型為String類(lèi)型。 我在這里寫(xiě)一個(gè)簡(jiǎn)單的VO為: public class DateVO { ..........//省略掉定義部分 public void setStart_Date(String Start_Date){ start_Date= start_Date }
public String getStart_Date() { return this.Start_Date; } /** * 判斷Start_Date是否為空 */ public boolean isEmptyStart_Date() { if (this.Start_Date == null || this.Start_Date.equals("") ) { return true; } else { return false; } } } //A.所傳遞參數(shù)為DATE類(lèi)型 //獲得當(dāng)前時(shí)間,并將值傳遞給VO: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //將當(dāng)前時(shí)間轉(zhuǎn)換為yyyy-MM-dd hh:mm:ss格式 String nowDate = sdf.format(new Date()); //將此String值放進(jìn)VO中的setDate()方法中。 vo.setDate(nowDate);
//在組織SQL語(yǔ)句時(shí)從VO中獲得時(shí)間值。 SQL語(yǔ)句的前部分省略,主要為后部分的時(shí)間的處理。 sbSQL.append(insert into news (start_date,....) value (); if (!vo.isEmptyStart_Date()) { sbSQL.append(""); sbSQL.append("to_date(‘"); //to_date為Oracle數(shù)據(jù)庫(kù)中轉(zhuǎn)換時(shí)間的函數(shù),處理對(duì)象為String sbSQL.append(vo.getStart_Date()); sbSQL.append("‘,‘yyyy-mm-dd hh24:mi:ss‘)");//注意這行代碼,格式得正確,否則得不到時(shí)、分、秒 } else { sbSQL.append("NULL"); } sbSQL.append(" ....) ");
//B.所傳遞參數(shù)為String類(lèi)型(從頁(yè)面獲取) if (request.getParameter("Start_Date") != null && !request.getParameter("Start_Date").equals("")) { //將此String值放進(jìn)VO中的setDate()方法中。 vo.setDate(Start_Date); } 后面處理同上 ........
第二種:VO中存儲(chǔ)時(shí)間的類(lèi)型為DATE類(lèi)型。 public class DateVO { ..........//省略掉定義部分 public void setStart_Date(Date Start_Date){ start_Date= start_Date }
public Date getStart_Date() { return this.Start_Date; } /** * 判斷Start_Date是否為空 */ public boolean isEmptyStart_Date() { if (this.Start_Date == null || this.Start_Date.equals("") ) { return true; } else { return false; } } } //A.所傳遞參數(shù)為DATE類(lèi)型 //獲得當(dāng)前時(shí)間,并將值傳遞給VO: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String nowDate = sdf.format(new Date());//將當(dāng)前時(shí)間轉(zhuǎn)換為yyyy-MM-dd hh:mm:ss格式 將此String值放進(jìn)VO中的setDate()方法中。 vo.setDate(TimeExh.transToDate(nowDate));
//在組織SQL語(yǔ)句時(shí)從VO中獲得時(shí)間值。 SQL語(yǔ)句的前部分省略,主要為后部分的時(shí)間的處理。 sbSQL.append("insert into news (start_date,....) value ("); if (!vo.isEmptyStart_Date()) { sbSQL.append(""); sbSQL.append("to_date(‘"); sbSQL.append(sdf.format(vo.getStart_Date())); sbSQL.append("‘,‘yyyy-mm-dd hh24:mi:ss‘)"); } else { sbSQL.append("NULL"); }
sbSQL.append(" ....) "); //B.所傳遞參數(shù)為String類(lèi)型 if (request.getParameter("Start_Date") != null && !request.getParameter("Start_Date").equals("")) { //將此String值放進(jìn)VO中的setDate()方法中。 vo.setDate(TimeExh.transToDate(request.getParameter("Start_Date"))); } //后面處理同上 .........
|