今天遇到要用dateformat處理時間的情況,之前沒有弄過,因爲着急,剛開始沒搞清楚原理就亂用,進入一個誤區。爲了讓其他人不要像我一樣誤解這個類的用法做了個簡答的總結。
要處理的問題:
我的情況是這樣,我的程序會獲得格式:XXXX年XX月XX日的日期,然後我要轉化成XXXX-XX-XX形式,並存成timestamp形式時間信息存入數據庫,爲完成以時間排序的工作做好準備。
一、時間格式轉換:
剛開始我獲得了一個字符串,裏面是一個日期:2012年10月1日。因爲我想把這種格式用dateformat類解析成2012-10-01的形式,所以我在初始化一個格式的時候是這樣的:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
然後我就弱弱用SimpleDateFormat的parse函數對我得到的字符串進行解析。然後用format妄想生成2012-10-01形式的結果。當時的代碼是這樣的:
format.format(format.parse(“2012年10月1日”));
。。。現在看來,我弱爆了!
後來仔細一看才發現parse和format功能類似一種互逆過程:
parse可以把傳入的字符串按照format定義的格式從第一個字符開始解析,並轉化成Date類型的時間。而format則可以把Date類型的時間數據轉化成一個字符串。所以,上面的代碼format.format(format.parse(“2012年10月1日”));僅僅想讓他運行不報錯,就要把format的格式定義成要處理的字符串中的時間格式:我們這裏當然是應該定義成:
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");這樣就可以把傳入的時間“2012年10月1日”在String和Date兩種類型間轉化。
那麼我想要形如yyyy-MM-dd的時間怎麼辦呢?
只能手工把yyyy年MM月dd日形式的時間通過字符串操作轉化成形如yyyy-MM-dd的String,然後定義SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");對轉化後的新String進行操作。
總結:所以無論你要處理什麼格式的時間,在定義format的時候一定要定義和傳入的時間格式一致的形式。DateFormat只能進行在同一種時間格式裏做Date和String類型的轉化。想換種時間格式,就要自己手動提取和拼接字符串。如,我的代碼是這樣的:
String tmp = datetext.substring(0, 4) + "-" + datetext.substring(5, 7) + "-" + datetext.substring(8, 10)";
然後我對tmp進行parse的處理,就可以得到yyyy-MM-dd形式的Date類型時間。
二、從時間數據中獲取Timestamp,並存入數據庫
這裏先說下Timestamp只有一種格式就是:yyyy-MM-dd hh:mm:ss.ff(這裏最後的ff是毫秒)
我獲取Timestamp代碼如下:
Timestamp ts = Timestamp.valueOf(tmp);
然後在數據庫操作的代碼裏用setTimestamp插入數據就行了:
String sqlurl = "jdbc:mysql://localhost:3306/CityMaps?user=root&password=123456&useUnicode=true&characterEncoding=utf8";
connection = DriverManager.getConnection(sqlurl);
PreparedStatement preparedStatement;
preparedStatement = connection
.prepareStatement("INSERT INTO News(type,title,summary,url,updatetime) VALUES(?,?,?,?,?)");
preparedStatement.setString(1, type);
preparedStatement.setString(2, title);
preparedStatement.setString(3, "");
preparedStatement.setString(4, url);
preparedStatement.setTimestamp(5,updatetime);
// 執行語句。
preparedStatement.executeUpdate();
技術相關更多文章猛擊:哇啦天堂論壇技術區