用DateFormat處理時間格式,轉化爲timestamp形式存入數據庫(以XXXX年XX月XX日爲例)

今天遇到要用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();


技術相關更多文章猛擊:哇啦天堂論壇技術區

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章