有 Java 编程相关的问题?

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

Java dateFormat不可解析日期异常

在将json对象中收到的日期转换为所需格式时,我遇到了一个问题。我从后端得到的日期是Apr-13, Wednesday, 04:06:00 PM。这就是我所做的

String refreshDateString = jobj.optString("refresh_date").toString();
SimpleDateFormat parseFormat = new SimpleDateFormat("MMM-dd, EEEE  hh:mm:ss a");
Date refreshDate = parseFormat.parse(refreshDateString.replaceAll("\\p{Cntrl}", ""));
SimpleDateFormat outputFormat = new SimpleDateFormat("MMM dd, E, hh:mm a");

我也试着用一个E代替EEEE。有关于我错在哪里的信息吗?非常感谢


共 (3) 个答案

  1. # 1 楼答案

    图案上缺少额外的空格和逗号。不过,重要的一点是,如果您的系统使用的语言与您收到的日期不同,那么语言环境是:

    SimpleDateFormat parseFormat = new SimpleDateFormat("MMM-dd, EEEE, hh:mm:ss a", Locale.US);
    

    在我的例子中,由于我的机器是意大利语的,如果没有区域设置,我将永远无法解析给定的日期

  2. # 2 楼答案

    您在周中的日期名称后缺少一个,,您应该使用E而不是EEEE,请使用此格式

    DateFormat parseFormat = new SimpleDateFormat("MMM-dd, E, hh:mm:ss a");
    

    如果您在周中的日名称后没有,;在EEEEhh{}之间有额外的空间。用这个代替

    DateFormat parseFormat = new SimpleDateFormat("MMM-dd, E hh:mm:ss a");
    
  3. # 3 楼答案

    另外,我建议您使用Java8中包含的JodaTime库或最新版本的DateAPI(实际上是JodaTime的复制和粘贴)。因为和日期打交道要好得多。因此,要解析给定格式的字符串

    String string = "Apr-13, Wednesday, 04:06:00 PM";
    DateTimeFormatter formatter = DateTimeFormat.forPattern("MMM-dd, E, hh:mm:ss a");
    DateTime dt = formatter.parseDateTime(string);
    

    如果你的代码中有很多日期转换等,那就一定要有