2013-12-23 55 views
0

我有約會對象,如下所示:不能使java.text.SimpleDateFormat的工作

java.util.Date d = new java.util.Date(System.currentTimeMillis()); // Mon Dec 23 14:57:28 PST 2013 

我需要格式化的日期得到另一個日期對象與此格式而不是: 2013-12- 23十四點57分28秒

我試過這段代碼:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss"); 
sdf.format(d); // d is still Mon Dec 23 14:57:28 PST 2013, no formatting. 

我試過這段代碼:

String s = d.toString(); 
try {   
     d = sdf.parse(s); 
    } catch (Exception e) 
     e.printStackTrace(); // java.text.ParseException: Unparseable date: "Mon Dec 23 14:35:48 PST 2013" 

你能告訴我我做錯了什麼嗎?我GOOGLE搜索它,但格式化日期的解決方案或多或少是我試過的。任何幫助是極大的讚賞。

回答

3

你不明白日期是什麼,format()做什麼。日期只是毫秒數。而已。它沒有任何格式。格式化日期根本不會改變日期。它返回一個包含日期的人類可讀表示的字符串(如「2012-11-23」或「4月2日星期一」)。

所以,下面的指令:

sdf.format(d); 

實際上是一個空操作。您忽略它返回的字符串。

如果你想要在調用date.toString()時使用特定的格式,這是不可能的。當你想顯示而不是做

System.out.println(date); 

使用

DateFormat format = new SimpleDaeFormat("yyyy-MM-dd"); 
System.out.println(format.format(date)); 

所有這一切都在一個特定的格式(yyyy-MM-dd爲例)的日期,在javadoc中被明確解釋。你應該閱讀它。

+0

@blueSky:不理我的回答,我沒有完全讀完這個問題。這是你想要的。 –

+0

@JB Nizet:你說得對。我從format()方法返回的字符串中獲取格式化的日期。但是,我仍然不知道爲什麼:d = sdf.parse(s);應該拋出一個exp。?如果我需要一個日期對象 - 不是字符串 - 以下格式:2013-12-23 15:24:21? – blueSky

+0

@blueSky:他解釋Date對象沒有格式。 –

0

SimpleDateFormat,不會更改日期格式,它只會給出一個格式化日期,僅用於顯示目的,而不是其他任何內容。

util.Date將始終有一種格式(很長的毫秒數),您可以使用SimpleDateFormat以任何方式進行格式化。所以實際上無論你得到什麼日期,你都可以格式化爲你想要的格式。

如果你解釋你爲什麼試圖做你正在做的事,那麼也許我們可以更好地支持你。

+0

我有一個日期實際上是這樣的:「星期一Dec 23 15:24:21 PST 2013」​​,需要格式化爲:2013-12-23 15:24:21將其保存在數據庫(sql server)在類型的字段中:datetime。我想我可以用格式化的字符串做到這一點 - 我不知道是否需要:java.sql.Date - 這是我試圖使用SimpleDateFormat.parse()方法獲取Date對象的原因。無論如何,我仍然不知道如何使用parse()方法,它不會拋出exp。我想我做錯了,這就是爲什麼它會拋出exp。 – blueSky

+0

保存到數據庫時,你打算使用直接SQL還是像休眠一樣的ORM? – IndikaM

+0

好吧,明白了。感謝所有的時間和迴應。 – blueSky