无法将 java 中的字符串转换为 MMM/dd/yyy 格式

can't convert String to MMM/dd/yyy format in java

我尝试将输入类型 String 转换为格式 "MMM/dd/yyyy"LocalDate,但是当我输入时,它抛出异常:

Exception in thread "main" java.time.format.DateTimeParseException: Text 'DEC/12/1999' could not be parsed at index 0

这是我的代码:

Scanner sc = new Scanner(System.in);
DateTimeFormatter format1 = DateTimeFormatter.ofPattern("MMM/dd/yyyy");
System.out.print("Please enter the first date: ");
LocalDate firstDate = LocalDate.parse(sc.nextLine(), format1);
System.out.print("Please enter the second date: ");
System.out.println(firstDate);

我该如何解决这个问题?

在解析像 "DEC/12/1999":

这样的 String 时,您必须注意几件事
  • 月份的缩写没有全球标准,它们在语言(例如英语、法语、日语...)和风格(例如是否有尾随点)方面有所不同
  • 在解析小写月份缩写和大写月份缩写时存在差异

这就是为什么你必须确保你的 DateTimeFormatter 真的知道该做什么,我认为如果只是通过 .ofPattern(String, Locale) 构建是行不通的。

向其提供有关要解析的 String 的信息:

  • 通过应用 parseCaseInsensitive()
  • 使其不区分大小写地解析
  • 通过定义 Locale
  • 使其考虑语言和风格

您可以使用 DateTimeFormatterBuilder 来做到这一点,下面是一个示例:

public static void main(String[] args) throws IOException {
    // example input
    String date = "DEC/12/1999";
    // Build a formatter, that...
    DateTimeFormatter dtf = new DateTimeFormatterBuilder()
                                // parses independently from case,
                                .parseCaseInsensitive()
                                // parses Strings of the given pattern
                                .appendPattern("MMM/dd/uuuu")
                                // and parses English month abbreviations.
                                .toFormatter(Locale.ENGLISH);
    // Then parse the String with the specific formatter
    LocalDate localDate = LocalDate.parse(date, dtf);
    // and print the result in a different format.
    System.out.println(localDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
}

输出:

1999-12-12