【问题标题】:SimpleDateFormat String简单日期格式字符串
【发布时间】:2011-08-22 16:03:03
【问题描述】:

我有这个代码块,其中dateFormat.format 的参数将始终是string,这就是我在这里使用.toString() 的原因。我收到错误“无法将给定的对象格式化为日期”。

有没有办法做到这一点?请注意,字符串来自数据库,我在这里使用 new Date() 作为示例。

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

【问题讨论】:

  • 不清楚您最终要达到的目标

标签: java simpledateformat


【解决方案1】:

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);

【讨论】:

  • @Evan parse() 方法接受一个字符串。 format() 方法接受一个日期。
  • 在我的情况下,如果我解析它而不是使用格式,它总是有一个要格式化的字符串?
  • @Sonesh 如果您需要不同格式的日期,是的,您必须先解析然后按您想要的方式格式化。
【解决方案2】:

SimpleDateFormat有两种应用:

  • 解析字符串 - 当您将日期表示为字符串,并且想要获取相应的 Date 对象时。然后使用dateFormat.parse(string)

  • 格式化日期 - 当你有一个 Date 对象并且你想以特定方式格式化它(通常是为了向用户显示它)。在这种情况下使用dateFormat.format(date)

这两种方法是相互的——一种接受一个日期并返回一个字符串,另一种接受一个字符串并返回一个日期。

对于您的特殊情况,也许您需要.parse(..)。但请注意,每个“自尊”数据库驱动程序都应该有一个选项来返回 Date 而不是一些字符串表示。如果您碰巧将日期作为字符串存储在数据库中 - 不要那样做。使用原生日期类型。

【讨论】:

  • 我尝试使用 parse getting error 。 “无法解析的日期:“2011 年 8 月 22 日星期一 16:10:16 GMT+00:00””。 SimpleDateFormat dateFormat = new SimpleDateFormat("MMMMM dd, yyyy"); Date parsedDate = dateFormat.parse(new Date().toString()); String sCertDate = dateFormat.format(parsedDate);
  • 嗯,显然你指定的格式和日期的格式是不一样的。
【解决方案3】:

如果需要读取一种String格式的Date并输出为另一种String格式,则需要2个格式化器,例如:

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

【讨论】:

  • 我试过这个 outputFormat.format(inputFormat.parse(new Date().toString()));错误是“无法解析的日期:”Mon Aug 22 16:10:16 GMT+00:00 2011“”
  • @Sonesh 您需要足够的日期格式来解析“Mon Aug 22 16:10:16 GMT+00:00 2011”。 “yyyy-MM-dd”解析日期如“2010-11-25”。
猜你喜欢
  • 2012-07-21
  • 2012-01-15
  • 1970-01-01
  • 2014-04-26
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
相关资源
最近更新 更多