无法在索引33处解析文本

时间:2018-10-24 15:00:15

标签: android datetime threetenbp

我正在使用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());

我遇到以下错误:

  

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

谢谢。

1 个答案:

答案 0 :(得分: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”不能为LocalDateTime提供足够的信息,因此我添加了“ HH:mm”