java.text.ParseException:无法解析的日期:“ 11:00 PM,2018年10月7日星期日”

时间:2018-10-08 14:25:41

标签: java

我已经尝试了下面的代码,但是没有用。

请解释为什么它不起作用。

public static void main(String[] args) {
    String ti = "11:30 PM, Sun 07 Oct 2018";
    String sformat = "h:m a, E dd M yyyy";
    String cformat = "hh:mm a";
    String d = dateFormater(ti, cformat, sformat);
    System.out.println(d);
}

public static String dateFormater(String dateFromJSON,
                                  String expectedFormat, String oldFormat) {
    SimpleDateFormat dateFormat = new SimpleDateFormat(oldFormat);
    Date date = null;
    String convertedDate = null;
    try {
        date = dateFormat.parse(dateFromJSON);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(expectedFormat);
        convertedDate = simpleDateFormat.format(date);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return convertedDate;
}

2 个答案:

答案 0 :(得分:1)

您的日期格式不正确。请使用以下格式。

String sformat= "hh:mm a, EEE dd MMM yyyy";

答案 1 :(得分:1)

您的模式需求

  • MMM,因为月份是短字母格式(M仅用于月份编号,MMMM是长字母格式)

    String sformat = "h:m a, E dd MMM yyyy";
    

您应该考虑使用新的time API:java.time,因为它更易于使用,并且不需要额外的强制性try/catch

public static String dateFormater(String dateFromJSON, String expectedFormat, String oldFormat) {
    LocalDateTime date = LocalDateTime.parse(dateFromJSON, DateTimeFormatter.ofPattern(oldFormat, Locale.ENGLISH));
    String newStr = date.format(DateTimeFormatter.ofPattern(expectedFormat, Locale.ENGLISH));
    return newStr;
}

或单行:

public static String dateFormaterSh(String dateFromJSON, String expectedFormat, String oldFormat) {
    return LocalDateTime.parse(dateFromJSON, DateTimeFormatter.ofPattern(oldFormat, Locale.ENGLISH))
                        .format(DateTimeFormatter.ofPattern(expectedFormat, Locale.ENGLISH));
}