LocalDate解析器无法将月份解析为字符串:“ Aug”

您是律师:

我正在尝试使用LocalDate解析以下字符串:“ 04 Aug 2015”。

在尝试了一些DateTimeFormatters的变体之后,我在SO中寻找答案,发现答案中给出的一些解析示例对我不起作用。经过进一步调查,我发现Java 14无法解析包含字符串月份的日期,例如“ Jul”,“ Feb” ...,但是在Java 8和10中,它可以正常工作。

引发的异常是:

java.time.format.DateTimeParseException:无法在索引3处解析文本“ 2015年8月4日”

Java 14中的LocalDate / DateTimeFormatter有什么变化吗?我在文档中找不到任何内容。

这是在Java 8/10上成功打印并在Java 14上引发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);
  }
rzwitserloot:

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

解析器将语言环境作为工作的一部分,并使用它来翻译(缩短)月份名称。

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

我的猜测是您的JDK14安装使用的默认语言环境与其他安装不同。

如下测试:

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

并修复您的解析代码:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MMM yyyy", Locale.ENGLISH);

注意:虽然在Java代码和一百万个堆栈溢出示例中非常常见DTF.ofPattern("pattern");,但是这些代码行中 99%是错误的 -鉴于Java通常部署在服务器上和/或此代码用于解析网络流量和不是本地输入的内容,则使模式使用系统默认的语言环境是不正确的。

就像您几乎不应该使用,new FileWriter("filename")而不是使用一样new FileWriter("filename", StandardCharsets.UTF_8);,您也几乎不应该使用DateTimeFormatter.ofPattern(pattern);-如果您的IDE能够列出禁止的方法(调用的方法必须带有注释,说明您知道您正在执行的操作),则应添加它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Android中解析字符串“ Mon Aug 08 16:44:19 EAT 2016”迄今为止

无法将字符串解析为LocalDate(Java 8)

posgres查询按日期过滤的格式为Mon Aug 24 14:16:00 GMT 2020

Json解析器,错误地将字符串解析为数字

为JSON字符串编写解析器

如何规范化一个熊猫数据框的日期列(ValueError:无法将字符串转换为浮点数:'17-Aug-20 00:00:00')

如何读取格式为“15Aug21:12:45:24”的字符串列作为 Tera 数据中的时间戳?

Swift的字符串解析器?

在不使用 DOM 解析器的情况下将 Html 字符串解析为特定的数组

使用PHP解析器解析PHP字符串

CSS解析器解析字符串内容

无法将字符串解析为 ZonedDateTime

无法将字符串解析为 JSON

DateTimeFormatter无法将字符串解析为LocalDateTime

无法将字符串解析为整数值

使用PowerShell无法将字符串解析为对象

无法将字符串Json解析为Json对象

C#无法将JSON解析为字符串

Rust:无法将整数解析为字符串,ParseIntError

无法将字符串解析为日期格式

无法将约束引用“字符串”解析为类型

树而不是字符串的解析器组合器

为什么此免费Monad解释器无法将字符串解析为ID [A]

另一个解析器中的C字符串解析器

在 JS 中为特定值编写字符串解析器

如何在文档字符串中为PyCharm解析器指定类或函数类型

如何将字符串(例如“Sunday, July 4, 2021”)解析为 LocalDate?

使用Java8将年份字符串解析为LocalDate

将字符串解析为LocalDate对象是否需要执行此额外检查?