【问题标题】:Parse String for unknown TemporalAccessor解析未知 TemporalAccessor 的字符串
【发布时间】:2018-02-28 10:11:00
【问题描述】:

我收到一个时间未知的请求参数(日期、时间或 ISO 格式的时间戳),并希望将其解析为 java.time.temporal.TemporalAccessor

  • LocalDate 当字符串表示像 "2018-02-28" 这样的日期时
  • LocalDateTime,当字符串表示像"2018-02-28T11:20:00"这样的时间戳时

以下尝试导致DateTimeParseException

TemporalAccessor dt = DateTimeFormatter.ISO_DATE_TIME.parseBest(str, LocalDateTime::from, LocalDate::from);

决定字符串的长度或“T”的出现,DateTimeFormatter 使用,在我看来有点 hacky。以及尝试一种又一种格式。

有更好的解决方案吗?

【问题讨论】:

  • 你能列出你的问题中可能的输入吗?

标签: java date time java-time datetime-parsing


【解决方案1】:

您的问题是ISO_DATE_TIME 需要一个时间,正如名称所示。在您的情况下,您需要在模式中使用可选部分。

这应该可以按要求工作:

DateTimeFormatter FMT = new DateTimeFormatterBuilder()
        .append(DateTimeFormatter.ISO_LOCAL_DATE)
        .optionalStart() //HERE WE INDICATE THAT THE TIME IS OPTIONAL
        .appendLiteral('T')
        .append(DateTimeFormatter.ISO_LOCAL_TIME)
        .toFormatter();

String input = "2018-02-28";
TemporalAccessor dt = FMT.parseBest(input, LocalDateTime::from, LocalDate::from);        

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2021-04-16
    • 1970-01-01
    • 2021-08-06
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多