2011-08-22 37 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

相关问题