【问题标题】:How to parse Brazil (Portugal) date?如何解析巴西(葡萄牙)日期?
【发布时间】:2020-06-12 09:59:51
【问题描述】:

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

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

观察到的输出:

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

异常发生在这一行:

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

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

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

【问题讨论】:

  • 您能否提供更多上下文。你是如何使用这种模式的?你能提供更多的代码吗?
  • 欢迎来到 Stack Overflow。更正:Java 包含巴西葡萄牙语语言环境,您的语言环境变量有效。也许您的问题是您的字符串使用了错误的大小写。至少在我的 Java 11 上,除非我指示我的 DateTimeFormatterBuilder 使用不区分大小写的解析,否则语言环境需要全部小写的“之前”。如果您提供不适合您的代码,我们可以为您提供更好的帮助。 How to create a Minimal, Reproducible Example
  • 正如您所观察到的,没有最小可重现代码示例以及预期和观察到的结果的问题往往会在 Stack Overflow 上快速关闭。我已经编辑了您的问题以显示一种可以完成的方法。我们是否可以重新打开您的问题取决于三个具有足够声誉的用户注意到编辑并投票重新打开。我不知道现在是否会发生这种情况,在提出问题 19 小时后和周末访问的用户较少。我们拭目以待。

标签: java date datetime locale datetime-parsing


【解决方案1】:

您的一个问题是葡萄牙语中的“de”在日/月和年之间建立关系。 Java 不会理解这一点,因此您必须在您的模式中“硬编码”它。 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

【讨论】:

    猜你喜欢
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多