2011-08-22 41 views
12

我有這個代碼塊,其中參數dateFormat.format將始終是string那就是爲什麼我在這裏做了.toString()。我收到錯誤「無法格式化給定的對象作爲日期」。SimpleDateFormat字符串

有沒有辦法做到這一點?請注意,字符串來自數據庫我在這裏使用新的Date()作爲示例。

SimpleDateFormat dateFormat = new SimpleDateFormat("MMMMM dd, yyyy"); 
String sCertDate = dateFormat.format(new Date().toString()); 
+0

目前尚不清楚你想最終達到 – Bozho

回答

21

DateFormat#format接受日期而不是字符串。

使用

String sCertDate = dateFormat.format(new Date()); 

如果你有一個字符串從一個特定格式的數據庫來了,要轉換爲日期,您應該使用parse方法。

@Sonesh - 讓我們假設你在數據庫中有一個恰好表示日期的字符串(可能會更好地將對象作爲日期存儲在數據庫中?),那麼你應該先將parse它轉換爲你想要的格式然後format它以你想要的字符串格式。

// Assumes your date is stored in db with format 08/01/2011 
SimpleDateFormat dateFormatOfStringInDB = new SimpleDateFormat("MM/dd/yyyy"); 
Date d1 = dateFormatOfStringInDB.parse(yourDBString); 
SimpleDateFormat dateFormatYouWant = new SimpleDateFormat("MMMMM dd, yyyy"); 
String sCertDate = dateFormatYouWant.format(d1); 
+3

什麼@ Evan的'parse()'方法接受一個String。 'format()'方法接受一個Date。 – Marcelo

+0

@Marcelo:我的錯。 –

+0

在我的情況下,它將始終有一個字符串格式,我應該解析它,並使用格式? –

6

還有的SimpleDateFormat兩種應用:

  • 解析字符串 - 當你有表示爲字符串的日期,並且要得到相應的Date對象。然後使用dateFormat.parse(string)

  • 格式的日期 - 當你有一個Date對象,你想它(通常是爲了展示給用戶)格式以特定的方式。在這種情況下使用dateFormat.format(date)

這兩種方法是相互的 - 一個需要的日期並返回一個字符串,以及其他需要一個字符串和返回日期。您可能需要.parse(..)。但請注意,每個「自我尊重」的數據庫驅動程序都應該有一個返回Date的選項,而不是某些字符串表示形式。如果你碰巧在數據庫中存儲日期爲字符串 - 不要這樣做。使用本機日期類型。

+0

+1很好的解釋。 – 2011-08-22 16:09:09

+0

我試圖使用解析獲取錯誤。 「無法解析的日期:」8月22日星期一16:10:16 GMT + 00:00 2011「」。 SimpleDateFormat dateFormat = new SimpleDateFormat(「MMMMM dd,yyyy」); \t \t Date parsedDate = dateFormat.parse(new Date()。的toString()); \t \t String sCertDate = dateFormat.format(parsedDate); –

+2

好吧,顯然你指定的格式和日期的格式是相當不同的。 – Bozho

4

如果你需要讀取一個字符串格式,並將其輸出到另一個字符串格式的日期,你需要2格式化,例如:

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd"); 
SimpleDateFormat outputFormat = new SimpleDateFormat("MMMMM dd, yyyy"); 
String output = outputFormat.format(inputFormat.parse(input)); 
+0

我試過這個outputFormat.format(inputFormat.parse(new Date()。toString()));並且錯誤是「Unparseable date:」Mon Aug 22 16:10:16 GMT + 00:00 2011「」「 –

+1

@Sonesh你需要一個合適的日期格式來解析」Mon Aug 22 16:10:16 GMT + 00:2011 2011 」。 「yyyy-MM-dd」分析日期,如「2010-11-25」。 – Marcelo

相關問題