我目前從請求對象中拖出三個表單字段輸入。一天,一個月,一年。Java日期格式轉換
本月11日爲11日 月份爲12月12日 年份爲2010年爲本年度。
我需要將其轉換爲Java Date對象,但由於這麼多已被更改,我不知道什麼是將其存儲在java對象中的最佳方法。我需要它在格式
YYYY-MM-DD HH:MM:SS所以我可以比較日期在MySql數據庫。
我目前從請求對象中拖出三個表單字段輸入。一天,一個月,一年。Java日期格式轉換
本月11日爲11日 月份爲12月12日 年份爲2010年爲本年度。
我需要將其轉換爲Java Date對象,但由於這麼多已被更改,我不知道什麼是將其存儲在java對象中的最佳方法。我需要它在格式
YYYY-MM-DD HH:MM:SS所以我可以比較日期在MySql數據庫。
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
我需要將其轉換成一個Java Date對象
實例化一個GregorianCalendar
,設置相應的字段,並在其上調用getTime
。由於它聽起來不像是在收集時間信息,所以您可能需要特別清除這些字段,否則您將獲得該對象構建時的當前時間。
我需要格式[...],所以我可以比較MySql數據庫中的日期。
你不應該用文本格式來比較日期。使用數據庫的本機日期/時間類型創建列,並在Java中使用Date類型。在進入或離開數據庫時,JDBC應爲您進行轉換。
日期格式只能用於輸出到外部進程或顯示。使用SimpleDateFormat
查看Bakkal的格式化答案。
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類。
對於僅限日期的值,如果數據庫列與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 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
,YearQuarter
和more。