0

我正在研究 ThreeTenABP 库来解析日期和时间。但是,它正在崩溃。我使用的 API 发送 DateTime 之类的;

2018-10-20T14:27:47.3949709+03:00

这是我尝试解析的方式;

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .append(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
                .append(DateTimeFormatter.ofPattern("yyyy-MM-dd"))
                .toFormatter();

Timber.d(LocalDateTime.parse("2018-10-20T14:27:47.3949709+03:00", formatter).toString());

我收到以下错误:

无法在索引 33 处解析文本“2018-10-20T14:27:47.3949709+03:00”

提前致谢。

4

1 回答 1

2

错误信息的解释:

2018-10-20T14:27:47.3949709+03:00是 33 个字符长,因此

无法在索引 33 处解析文本“2018-10-20T14:27:47.3949709+03:00”

意味着它期望第 34 个字符不存在(索引为 0)。

问题

您定义Formatter它的方式将接受 2018-10-20T14:27:47.3949709+03:002018-10-20`

解决方案:

要克服这个问题,您可以放弃.append(DateTimeFormatter.ofPattern("yyyy-MM-dd")

或者定义一个Formatter接受这两种格式的startOptionalendOptional

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .optionalStart()
    .append(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
    .optionalEnd()
    .optionalStart()
    .append(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))
    .optionalEnd().toFormatter();

您可以在https://ideone.com/RDVHYG看到该示例

旁注:“yyyy-MM-dd”没有为 a 提供足够的信息,LocalDateTime因此我添加了“HH:mm”

于 2018-10-24T15:19:11.530 回答