【问题标题】:Date format error with "2011-07-27T06:41:11+00:00"“2011-07-27T06:41:11+00:00”的日期格式错误
【发布时间】:2011-07-27 07:49:41
【问题描述】:

我正在尝试格式化时间/日期字符串:

String date = "2011-07-27T06:41:11+00:00";
DateFormat formatter = new SimpleDateFormat("yyyy MM-dd'T'HH:mm:ssz"); //2011-07-27T06:41:11+00:00
Date Sdate = formatter.parse(date.toString());

这是抛出错误

unable to parse newDate.

我不明白为什么会出现这个错误,谁能解释一下?

【问题讨论】:

  • 用一些分号怎么样?
  • String newDate = "2011-07-27T06:41:11+00:00"; DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");//2011-07-27T06:41:11+00:00 Date Sdate = formatter.parse(newDate.toString() );这是抛出无法解析 newDate。请建议..
  • @reporter:我认为我们不应该通过编辑从代码中删除语法错误。

标签: java date date-format simpledateformat


【解决方案1】:

问题在于时区信息。 ':' 是时区字符串中的非法字符。见http://download.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html#rfc822timezonehttp://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html#timezone

以下字符串是可解析的

String date = "2011-07-27T06:41:11+0000";

删除“:”,您的代码将起作用。

【讨论】:

  • 不,我必须解析那个日期......我们正在从提要中获取这个日期值
  • 在传递给格式化程序之前,您需要使用字符串替换来删除无关的 ':'。
  • @Cintu :您可以使用正则表达式来格式化适合您的 SimpleDateFormat 模式的日期。
  • @Cintu:那你做错了。而“不工作”是指您可以就任何给定问题提供的最少信息量。
  • 我现在正在使用此代码并且它正在工作...我能够解析.. date = (date.replace('T', '')).replace("+", "###").split("###")[0] formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
【解决方案2】:

SimpleDateFormat 不接受所有 ISO8601 日期时间格式。

您可以在 JAXB 中使用 DatatypeConverter.parseDateTime。

类似

String date = "2011-07-27T06:41:11+00:00";
Date Sdate = DatatypeConverter.parseDateTime(date).getTime();

请尽量遵守约定(变量名应以小写开头)

【讨论】:

    【解决方案3】:

    试试 JodaTime。 Java 的内置日期处理不是那么好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多