【问题标题】:Unparseable date Exception无法解析的日期异常
【发布时间】:2011-10-02 13:13:22
【问题描述】:

好吧,我正在尝试从 rss 中获取日期,并且我在 logcat 中得到了这个执行:

E/AndroidNews(  870): Caused by: java.text.ParseException: Unparseable date: "Su
n, 02 Oct 2011 14:00:00 +0100"
E/AndroidNews(  870):   at java.text.DateFormat.parse(DateFormat.java:626)
E/AndroidNews(  870):   at com.warriorpoint.androidxmlsimple.Message.setDate(Mes
sage.java:57)

我的格式化程序

静态 SimpleDateFormat FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm");'

我的方法 setDate();

public void setDate(String date) {
    this.date=null;

    // pad the date if necessary
    while (!date.endsWith("00")){
        date += "0";
    }
    try {
        this.date = FORMATTER.parse(date.trim());
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
}

【问题讨论】:

  • 很明显,输入的不是预期的日期格式。所以,ParseException 是正常的,不是吗?
  • 有点离题,但永远不要将 SimpleDateFormat 放入静态变量中。您最终会在多个线程中使用相同的 SimpleDateFormat 实例并产生错误的日​​期和时间,因为它不是线程安全的。

标签: android exception date


【解决方案1】:

您使用了错误的格式,对于“Sun, 02 Oct 2011 14:00:00 +0100”,请尝试以下操作:

new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.US)

这也将区域设置强制为(美国)英语,因此日期和月份名称不受设备区域设置的影响,例如在葡萄牙语环境中期待“Sun”为“Dom”,“Out”为“Oct”(我偷看了你的个人资料)。

您在问题中的格式只能解析“2011-10-02 14:00”之类的日期。

另外,不要填写日期,让您的格式化程序进行解析。


如果您想以某种方式输出/显示java.util.Date,只需使用所需的格式字符串创建一个新的SimpleDateFormat(我们称之为displayFmt)并在其上调用format()

String formattedDate = new SimpleDateFormat("dd MM yyyy H").format(date);

这将为您提供今天的“02 10 2011 17”之类的信息,格式为用户/设备的首选语言环境。

请注意,在您的评论中,您说 dd mm yyyy h(小写 mh)会给您“dayOfMonth minutes year hours12”——我认为这不是什么你想要,所以我把它改成大写 M 和大写 H 给你“dayOfMonth month year hours24”。

【讨论】:

  • 我更改了格式并在模拟器中工作,但在我的真实手机中发生了异常,我看到了 logcat,他指的是这一行:this.date = FORMATTER.parse(date.trim());
  • 您是否更新了手机上的应用程序?您手机上的logcat 是否包含与您问题中的相同的堆栈跟踪和消息? (你可以像模拟器一样检查你手机的logcat)——请用新信息更新你的问题,cmets太小了。
  • 是的,我更新了我的应用程序。这是我手机 logcat 的日志错误 -> link。奇怪的是它在模拟器中完美运行,而不是在我的手机上。谢谢。
  • 也许您的设备在与模拟器不同的语言环境下运行 - 尝试new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.US); 强制(美国)英文名称用于几天和几个月。
  • 现在完美运行!真的感谢菲利普·赖查特!现在我有一个问题,可以只显示日月年和小时吗?喜欢 dd mm yyyy h 再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
相关资源
最近更新 更多