无法解释的日期:" Fri Oct 10 23:11:07 IST 2014" (抵消20)

时间:2014-12-09 09:31:15

标签: java android date unparseable

我已经创建了这个功能来解析日期,但是这给出了例外:无法解析的日期:“Fri Oct 10 23:11:07 IST 2014”(在偏移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;
}

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

 SimpleDateFormat formatter = new SimpleDateFormat(newPattern);
 formatter.setLenient(true);

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

感谢大家的帮助......

答案 2 :(得分: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;

}

答案 3 :(得分: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),它同时适用于zZ

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

另见:https://stackoverflow.com/a/2581073/2886891

答案 4 :(得分:0)

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

从您的" IST"判断,您计算机上当前的默认语言环境可能不是英语或美国。由于字符串" Fri"和" 10月"如果是英文,解析将失败并使用您的默认语言环境。

将格式化程序编辑为以下内容,它应该有效:

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