当前位置: 首页 > 知识库问答 >
问题:

LocalDate解析器无法将month解析为字符串:“AUG”[重复]

柯国安
2023-03-14

我试图用localdate解析以下字符串:“04 Aug 2015”。

在尝试了DateTimeFormatters的一些变体之后,我在SO中寻找答案,并发现answer中给出的一些解析示例对我不起作用。经过进一步的研究,我发现Java14不能解析包含字符串月份的日期,如“jul”、“feb”。但在Java8&10中,它工作得完美无缺。

引发的异常是:

下面是在Java8/10上成功打印并在Java14上抛出DateTimeParseException的代码:

  public static void main(String[] args) {
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MMM yyyy");
    String anotherDate = "04 Aug 2015";
    LocalDate lds = LocalDate.parse(anotherDate, dtf);
    System.out.println(anotherDate + " , " + lds);
  }

共有1个答案

宋原
2023-03-14

把“八月”变成“第八个月”不是一件容易的事;大多数语言都没有aug。

解析器将区域设置作为作业的一部分,并使用它来翻译(缩短的)月份名称。

如果您没有指定它,那么您将得到系统默认值,这可能会有问题(因为在您运行它的每个JVM上都可能是不同的)。

我猜测您的JDK14安装与其他安装使用了不同的默认区域设置。

按照以下步骤进行测试

System.out.println(java.util.Locale.getDefault());

并修复解析代码:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MMM yyyy", Locale.ENGLISH);
 类似资料:
  • 问题内容: 我的输入是以2015年7月1日格式为“ 01-07-2015”的日期的字符串表示形式。我正在尝试将其解析为一个变量: 基于JavaDoc,我希望它能起作用。但是,我收到了一条非常友好和有用的信息: 由以下原因引起:java.time.DateTimeException:无法从TemporalAccessor获取LocalDate:{DayOfMonth = 1,MonthOfYear

  • 我的输入是2015年7月1日日期的字符串表示形式,格式为“01-07-2015”。我试图将其解析为变量: 基于JavaDoc,我希望这能起作用。然而,我收到了一条非常友好和有益的信息: 原因:java.time.DateTimeException:无法从TemporalAccessor获取LocalDate:{DayofMonth=1,MonthofYear=7,WeekBasedYear[Wee

  • 我刚刚开始尝试生锈,所以我已经实现了书的“猜测游戏”的修改版本。每次我试图输入数字,程序都无法从字符串中解析整数: 下面应用的代码。 我已经尝试了其他整数类型。

  • 问题内容: 我想将日期字符串解析为日期。我在寻找其他问题,但没有找到答案。 错误消息是java.text.ParseException:而且我不知道怎么了。 你能帮我吗。提前致谢。 编辑:好的。我将其翻译成英文,但是我仍然遇到同样的问题。我不想更改输入,因为它来自邮件数据库。还有其他想法吗? 我发现了问题。我是瞎子 来自数据库的St是,不是 谢谢。 问题答案: 在德语中,“欧洲中部时间”是“Mit

  • 问题内容: 我有一个将存储Number对象的列表。该列表将通过分析字符串列表来填充,其中每个字符串都可以表示Number的任何子类。 如何将字符串解析为通用数字,而不是特定的整数或浮点数? 问题答案: 数字不能实例化,因为它是抽象类。我建议传入数字,但是如果您设置为字符串,则可以使用任何子类来解析它们, 要么 @请参阅NumberFormat

  • 我如何能使这工作? 它会给出以下错误: "无效的日期格式31.01.2020 00:00:00"