Android java.text.ParseException:不可解析日期:

Android java.text.ParseException:不可解析日期:,android,Android,此代码在一些设备中崩溃 SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy hh:mm a", Locale.ENGLISH); format.setTimeZone(TimeZone.getTimeZone("GMT")); Date date = null; try { date = format.parse(dtStart);

此代码在一些设备中崩溃

 SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy hh:mm a", Locale.ENGLISH);
        format.setTimeZone(TimeZone.getTimeZone("GMT"));
        Date date = null;
        try {
            date = format.parse(dtStart);
            System.out.println("Date ->" + date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        long ere = date.getTime() / 1000;
错误:

System.err: java.text.ParseException: Unparseable date: "15-02-2016 08:56 p.m." (at offset 17)
System.err:     at java.text.DateFormat.parse(DateFormat.java:579)

在英语区域设置的SimpleDateFormat中,日期“p.m.”部分不被识别为AM/PM说明符。它应该是AM或PM。

在英语区域设置的SimpleDateFormat中,日期“p.m.”部分不被识别为AM/PM说明符。应该是上午或下午。

问题来自模式的
a
部分。 应该是“下午”,而不是“下午”

这与您收到的错误消息一致:

java.text.ParseException:不可解析日期:“2016年2月15日08:56下午”(偏移量17)


偏移量17(从零开始)对应于“p.m.”的“p”。

问题来自模式的
a
部分。 应该是“下午”,而不是“下午”

这与您收到的错误消息一致:

java.text.ParseException:不可解析日期:“2016年2月15日08:56下午”(偏移量17)


偏移量17(从零开始)对应于“p.m.”的“p”。

您可以使用此解决方案解决您的问题

但实际上这是正确的

private static void parseTime(String dtStart) {
    String time = dtStart.substring(0, dtStart.length() - 4);
    System.out.println(time);
    String timePick = dtStart.substring(dtStart.length() - 4, dtStart.length());
    System.out.println(timePick);
    if (timePick.equals("p.m.")) {
        time += "PM";
    } else if (timePick.equals("a.m.")) {
        time += "AM";
    }
    SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy hh:mm a", Locale.ENGLISH);
    format.setTimeZone(TimeZone.getTimeZone("GMT"));
    Date date = null;
    try {
        date = format.parse(time);
        System.out.println("Date ->" + date);
    } catch (Exception e) {
        e.printStackTrace();
    }
    long ere = date.getTime() / 1000;
}

您可以使用此解决方法解决您的问题

但实际上这是正确的

private static void parseTime(String dtStart) {
    String time = dtStart.substring(0, dtStart.length() - 4);
    System.out.println(time);
    String timePick = dtStart.substring(dtStart.length() - 4, dtStart.length());
    System.out.println(timePick);
    if (timePick.equals("p.m.")) {
        time += "PM";
    } else if (timePick.equals("a.m.")) {
        time += "AM";
    }
    SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy hh:mm a", Locale.ENGLISH);
    format.setTimeZone(TimeZone.getTimeZone("GMT"));
    Date date = null;
    try {
        date = format.parse(time);
        System.out.println("Date ->" + date);
    } catch (Exception e) {
        e.printStackTrace();
    }
    long ere = date.getTime() / 1000;
}