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

时间:2020-06-12 09:59:51

标签: java date datetime locale datetime-parsing

在Java中,解析日期没有巴西语言环境

我需要解析这个日期-2020年11月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

观察到的输出:

线程“ main”中的异常java.time.format.DateTimeParseException: 文本'11 de Ago de 2020 09:04'无法在索引3处解析

此行中发生异常:

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

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

线程“主”中的异常java.text.ParseException:无法解析的日期: “ 2020年11月11日09:04”

1 个答案:

答案 0 :(得分:2)

您的问题之一是葡萄牙语中的“ de”使日/月与年之间不相关。 Java无法理解这一点,因此您必须在模式中对其进行“硬编码”。 hh的意思是“ pm-hour-hour-hour-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