【问题标题】:SimpleDateFormat throws parse Exception for +0100SimpleDateFormat 为 +0100 引发解析异常
【发布时间】:2016-09-07 11:47:01
【问题描述】:

我正在尝试使用日期格式的两组日期:

DateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss");

它适用于日期:2016 年 8 月 26 日星期五 13:55:34 +0000

不适用于日期:2016 年 9 月 6 日星期二 11:57:14 +0100

对 +0100 日期抛出异常。

 Unparseable date: "Tue, 06 Sep 2016 11:57:14 +0100" (at offset 0)
 at java.text.DateFormat.parse(DateFormat.java:555)

【问题讨论】:

  • SimpleDateFormat format1 = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);仍然抛出同样的错误

标签: java simpledateformat date-parsing


【解决方案1】:

它在offset 0 失败,这意味着问题与时区 无关,而与字母中的日期 有关。

您应该设置LocaleSimpleDateFormat

    DateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss", Locale.ENGLISH);
    Date d1 = format.parse("Fri, 26 Aug 2016 13:55:34 +0000");
    Date d2 = format.parse("Tue, 06 Sep 2016 11:57:14 +0100");

没有任何问题。

如果您还需要检索时区,您还必须将z 添加到您的模式中:

    DateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);

【讨论】:

  • 赞成,因为我偷了你的语言环境点,需要澄清我的良心。
  • SimpleDateFormat format1 = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);还是不行。
  • 谢谢..它正在工作..我传递的字符串有一些导致问题的额外空格
【解决方案2】:

你需要

new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");

注意时区的z

如果未提供 z,解析器将忽略零 (+0000) 情况,但 不是 非零 (+0100) 情况。 lenient 属性控制此行为(Acknowledge @Marko Topolnik)。

由于你使用的是英文周名,你应该使用SimpleDateFormat的双参数构造函数,传递Locale.ENGLISH作为第二个参数。

【讨论】:

  • 仍然抛出同样的错误。我正在android中尝试这个
  • SimpleDateFormat format1 = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);还是没有运气
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多