在Oracle數據庫中時(shí)間的存儲和讀取(讀取時(shí)、分、秒)
一般數據庫中時(shí)間的格式為DATE類(lèi)型,而我們從頁(yè)面中獲取的時(shí)間往往為String類(lèi)型,這個(gè)就需要類(lèi)型的轉換。一般我們會(huì )通過(guò)調用java.text.SimpleDateFormat JAVA類(lèi)來(lái)對其進(jìn)行轉換。這個(gè)JAVA類(lèi)中我們經(jīng)常用到的方法有兩個(gè),一個(gè)是format(將時(shí)間格式的數據轉換成String類(lèi)型),另一個(gè)就是parse(將String類(lèi)型轉換成DATE類(lèi)型)。我們一般可以將parse封裝到自己的方法中,例:
/**
* 方法描述:頁(yè)面中字符串轉化為日期類(lèi)型
*
* 輸入參數:從頁(yè)面中得到的以字符串形式表示的日期數據
* 輸出參數:轉換后的日期
*/
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數據庫中提供了to_date的方法來(lái)對String類(lèi)型的時(shí)間來(lái)進(jìn)行轉換。而在Oracle數據庫中不能將時(shí)間直接放到VO中傳給數據庫,這樣數據庫中的時(shí)間為格林氏時(shí)間,不符合中國人的時(shí)間習慣。所以在這里有兩中不同的處理方式進(jìn)行處理。
第一種:VO中存儲時(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.所傳遞參數為DATE類(lèi)型
//獲得當前時(shí)間,并將值傳遞給VO:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//將當前時(shí)間轉換為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í)間的函數,處理對象為String
sbSQL.append(vo.getStart_Date());
sbSQL.append("‘,‘yyyy-mm-dd hh24:mi:ss‘)");//注意這行代碼,格式得正確,否則得不到時(shí)、分、秒
} else {
sbSQL.append("NULL");
}
sbSQL.append(" ....) ");
//B.所傳遞參數為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中存儲時(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.所傳遞參數為DATE類(lèi)型
//獲得當前時(shí)間,并將值傳遞給VO:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String nowDate = sdf.format(new Date());//將當前時(shí)間轉換為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.所傳遞參數為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")));
}
//后面處理同上
.........
聯(lián)系客服