有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JAVA文本例外情况:无法解析的日期:“2018年10月7日星期日晚上11:00”

我试过下面的代码,但不起作用

请解释为什么它不起作用

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) 个答案

  1. # 1 楼答案

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

    String sformat= "hh:mm a, EEE dd MMM yyyy";
    
  2. # 2 楼答案

    您的模式需要

    • MMM因为月份是短格式(M只表示月份编号,MMMM表示长格式)

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

    您应该考虑使用新的^ {< CD4>} API:^ {CD5>},因为它更容易使用,不需要额外的强制性^ {< CD6>}:

    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));
    }