如何解析巴西(葡萄牙)日期?

How to parse Brazil (Portugal) date?

在 java 中没有用于解析日期的巴西语言环境

我需要解析这个日期 - 2020 年 11 月 09:04

我创造

BrazilLocale = Locale.Builder().setLanguage("pt").setRegion("BR").build()

和这个模式 dd MMM yyyy hh:mm 但它不起作用。

例如我们可以试试:

    Locale brazilLocale = new Locale.Builder().setLanguage("pt").setRegion("BR").build();
    DateTimeFormatter formatter
            = DateTimeFormatter.ofPattern("dd MMM yyyy hh:mm", brazilLocale);
    String stringToParse = "11 de Ago de 2020 09:04";
    LocalDateTime dateTime = LocalDateTime.parse(stringToParse, formatter);
    System.out.println(dateTime);

预期输出:2020-08-11T09:04

观察到的输出:

Exception in thread "main" java.time.format.DateTimeParseException: Text '11 de Ago de 2020 09:04' could not be parsed at index 3

异常发生在这一行:

    LocalDateTime dateTime = LocalDateTime.parse(stringToParse, formatter);

当我尝试使用老式的 SimpleDateFormat 时,我得到了

Exception in thread "main" java.text.ParseException: Unparseable date: "11 de Ago de 2020 09:04"

您的问题之一是葡萄牙语中的 'de' 使 days/month 和年份之间没有关系。 Java 不会理解,所以你必须 'hard code' 在你的模式中。 hh 表示 'clock-hour-of-am-pm' 但您没有指定 'am' 或 'pm',因此您最有可能使用 HH。这是一个工作示例:

Locale brazilLocale = new Locale("pt", "BR");
final DateTimeFormatter formatter = new DateTimeFormatterBuilder()
           .parseCaseInsensitive()
           .appendPattern("dd 'de' MMM 'de' yyyy HH:mm")
           .toFormatter(brazilLocale);
System.out.println(LocalDateTime.parse("11 de ago de 2020 09:04", formatted));

导致 2020-08-11T09:04