2010-07-06 210 views
2

我目前從請求對象中拖出三個表單字段輸入。一天,一個月,一年。Java日期格式轉換

本月11日爲11日 月份爲12月12日 年份爲2010年爲本年度。

我需要將其轉換爲Java Date對象,但由於這麼多已被更改,我不知道什麼是將其存儲在java對象中的最佳方法。我需要它在格式

YYYY-MM-DD HH:MM:SS
所以我可以比較日期在MySql數據庫。

回答

4

SimpleDateFormat可以將字符串轉換爲java.util.Date對象。 Date類有一個getTime()方法,該方法以unix時間格式(自1970年1月1日以來的毫秒數,00:00:00 GMT)生成日期。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss"); 
long unix_time = dateFormat.parse(date).getTime(); 

您可以使用MySQL中的UNIX_TIMESTAMP()轉換爲unix時間。

mysql> SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19'); 
     -> 1196440219 
1

我需要將其轉換成一個Java Date對象

實例化一個GregorianCalendar,設置相應的字段,並在其上調用getTime。由於它聽起來不像是在收集時間信息,所以您可能需要特別清除這些字段,否則您將獲得該對象構建時的當前時間。

我需要格式[...],所以我可以比較MySql數據庫中的日期。

你不應該用文本格式來比較日期。使用數據庫的本機日期/時間類型創建列,並在Java中使用Date類型。在進入或離開數據庫時,JDBC應爲您進行轉換。

日期格式只能用於輸出到外部進程或顯示。使用SimpleDateFormat查看Bakkal的格式化答案。

0

TL;博士

myPreparedStatement.setObject(  // Exchange java.time object with database directly, with JDBC 4.2 and later. 
    … , 
    LocalDate.of(2012 , 12 , 10)  // Instantiate a `java.time.LocalDate` object. 
) 

java.time

現代的方法使用java.time類。

對於僅限日期的值,如果數據庫列與SQL標準DATE類型類似,則使用Java中的LocalDate類。

LocalDate ld = LocalDate.of(2012 , 12 , 10) ; 

或使用Month枚舉對象。

LocalDate ld = LocalDate.of(2012 , Month.DECEMBER , 10) ; 

隨着JDBC driver符合JDBC 4.2或更高版本,可以直接與數據庫交換java.time對象。不需要單純的字符串;使用智能對象。

myPreparedStatement.setObject(… , ld) ; 

檢索。

LocalDate ld = myResultSet.getObject(… , LocalDate.class) ; 

關於java.time

java.time框架是建立在Java 8和更高版本。這些類代替了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目,現在在maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore