【问题标题】:Unknown pattern letter: T - Parse string date with pattern T to LocalDateTime [duplicate]未知模式字母:T - 将模式 T 的字符串日期解析为 LocalDateTime [重复]
【发布时间】:2020-01-30 15:08:27
【问题描述】:

我需要将 String 中的以下日期格式解析为 Java LocalDateTime

所以我得到这样的字符串日期:2019-09-20T12:36:39.359

我有以下单元测试:

@Test
public void testDateTime() {
    assertEquals(SomeObject.getLocalDate(), LocalDateTime.parse(“2019-09-20T12:36:39.359”, DateTimeFormatter.ofPattern("yyyy-MM-ddThh:mm:ss.SSS")));
}

单元测试失败并出现异常:

java.lang.IllegalArgumentException: Unknown pattern letter: T

    at java.time.format.DateTimeFormatterBuilder.parsePattern(DateTimeFormatterBuilder.java:1661)
    at java.time.format.DateTimeFormatterBuilder.appendPattern(DateTimeFormatterBuilder.java:1570)
    at java.time.format.DateTimeFormatter.ofPattern(DateTimeFormatter.java:536)

如何正确地将这种格式的日期解析为LocalDateTime

【问题讨论】:

  • 你可以用单引号转义 T:"yyyy-MM-dd'T'hh:mm:ss.SSS"
  • 您的字符串是ISO 8601 格式,默认为LocalDateTime,因此您可以省略格式化程序:LocalDateTime.parse("2019-09-20T12:36:39.359")。不过,解析后的 LocalDateTime 对象永远不会等于 String

标签: java localdate date


【解决方案1】:

您也可以使用DateTimeFormatter.ofPattern,如下所示

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.getDefault());

    String dateStr = "2019-09-20T12:36:39.359";

    LocalDateTime date = LocalDateTime.parse(dateStr, dtf);

【讨论】:

  • 无需指定格式模式。此输入采用解析/生成文本时默认使用的标准 ISO 8601 格式。 LocalDateTime.parse( "2019-09-20T12:36:39.359" )
【解决方案2】:

您将StringDate 进行比较,这将表明您不等于。

你甚至不需要写DateTimeFormatter

编写这段代码就足够了:

assertEquals("2019-09-20T12:36:39.359", LocalDateTime.parse("2019-09-20T12:36:39.359").toString());

【讨论】:

  • 默认DateTimeFormatterDateTimeFormatter.ISO_LOCAL_DATE_TIME
【解决方案3】:

您可以使用DateTimeFormatter.ISO_LOCAL_DATE_TIME 作为格式化程序:

LocalDateTime.parse("2019-09-20T12:36:39.359", DateTimeFormatter.ISO_LOCAL_DATE_TIME);

【讨论】:

  • 我们如何才能精确到纳秒并去掉 0 java.lang.AssertionError: Expected :2019-09-20T12:36:39.359 Actual :2019-09-20T12:36:39.000000359
  • @M06H 在这里,您正在比较两个 String 值。您可以轻松地从String 中剥离0s。
  • 好的,如果我比较的是本地日期时间而不是字符串呢?
猜你喜欢
  • 2020-03-09
  • 2014-12-11
  • 2011-02-05
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
相关资源
最近更新 更多