5

我已经创建了这个函数来解析日期,但这给出了异常: Unparseable date: "Fri Oct 10 23:11:07 IST 2014" (at offset 20) 。请帮忙,因为我无法弄清楚这段代码有什么问题。

public Date parseDate() {
    String strDate ="Fri Oct 10 23:11:29 IST 2014";
    String newPattern = "EEE MMM dd HH:mm:ss Z yyyy";
    SimpleDateFormat formatter = new SimpleDateFormat(newPattern);
    try {
        Date date = formatter.parse(strDate);
        return date;
    } catch (java.text.ParseException e) {
        e.printStackTrace();
    }
    return null;
}
4

5 回答 5

6

使用解析器的语言环境:

    SimpleDateFormat formatter = new SimpleDateFormat(newPattern, Locale.US);

这应该可以解决您的问题。至少它适用于你的例子。

编辑:

看起来 Android 和 IST 时区确实存在问题。我可以使用上述模式解析 Android 上的任何时区,但不能解析 IST。

如果字符串中有 IST 区域,则快速修改时区部分。这对我也适用于 Android:

    String strDate = "Fri Oct 10 23:11:29 IST 2014";
    strDate = strDate.replace(" IST ", " GMT+0530 ");
    String newPattern = "EEE MMM dd HH:mm:ss Z yyyy";

    SimpleDateFormat formatter = new SimpleDateFormat(newPattern, Locale.ENGLISH);
于 2014-12-09T09:38:13.157 回答
2
 SimpleDateFormat formatter = new SimpleDateFormat(newPattern);
 formatter.setLenient(true);

//将格式化程序设置为宽松可以解决问题

谢谢各位帮忙。。。。

于 2014-12-09T10:14:48.447 回答
0

使用此代码它将起作用。我认为 IST 有问题,它无法识别它

public Date parseDate(String strDate) {
    strDate = "Fri Oct 10 23:11:29 2014";
    String newPattern = "EEE MMM dd HH:mm:ss yyyy";
    SimpleDateFormat formatter = new SimpleDateFormat(newPattern);
    formatter.setTimeZone(TimeZone.getTimeZone("IST"));
    Date date;
    try {
        date = formatter.parse(strDate.trim());
        Log.i("minal", "date:" + date);
        return date;
    } catch (java.text.ParseException e) {
        e.printStackTrace();
        Log.d("Populace", "ParseException: " + e.getLocalizedMessage());
    }
    return null;

}
于 2014-12-09T09:52:29.780 回答
0

根据文档http://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

Letter  Date or Time Component  Presentation    Examples
z   Time zone   General time zone   Pacific Standard Time; PST; GMT-08:00
Z   Time zone   RFC 822 time zone   -0800
X   Time zone   ISO 8601 time zone  -08; -0800; -08:00

对于一般时区,您应该使用小z而不是大写。Z

但是,我尝试了它(Java SE 1.8.0),它既适用于我z,也Z适用于我。

正如 Android007 作为评论所写:“在 Java 应用程序中它工作正常,但在 Android 上给出异常” - 可能是您的库比标准 Oracle J2SE 更彻底地实现了合同:)

另请参阅:https ://stackoverflow.com/a/2581073/2886891

于 2014-12-09T09:58:36.957 回答
0

您的日期模式包含区域敏感模式。由于 SimpleDateFormat 支持解析不同语言环境中的日期(英语、法语、美国、日语...等),因此您必须指定您使用的是哪一个。

从您的“IST”来看,您计算机上当前的默认语言环境可能不是英语或美国。由于字符串 "Fri" 和 "Oct" 是英文的,因此解析将在您的默认语言环境下失败。

将您的格式化程序编辑为以下内容,它应该可以工作:

SimpleDateFormat formatter = new SimpleDateFormat(newPattern, Locale.ENGLISH);
于 2014-12-09T10:17:14.663 回答