无法在索引 33 处解析文本

Text could not be parsed at index 33

提问人:nuhkoca 提问时间:10/24/2018 更新时间:10/25/2018 访问量:608

问:

我正在研究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

提前致谢。

安卓 日期时间 threetenbp

评论

0赞 leonardkraemer 10/25/2018
您可以通过替换为 or 来改进您的问题,无需将第三方库拉入其中。最好提供 MVCETimer.d()System.out.println()Log.d
0赞 nuhkoca 10/25/2018
谢谢,@leonardkraemer,对不起,这段代码取自一个公司项目。

答:

2赞 leonardkraemer 10/24/2018 #1

错误消息说明:

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

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

意味着它需要第 34 个字符,但该字符不存在(索引为 0)。

问题

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

溶液:

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

或者使用 startOptionalFormatterendOptional

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”没有产生足够的信息,因此我添加了“HH:mm”LocalDateTime

评论

0赞 nuhkoca 10/25/2018
嗨@leonardkraemer我尝试了您的解决方案,但是它抛出了以下错误:文本“2018-10-24T16:37:32.693Z”无法在索引 2 处解析
0赞 leonardkraemer 10/25/2018
不要介意导入,我在 android 上用实际的 ThreeTenABP 尝试过java.time
0赞 nuhkoca 10/25/2018
嗨,@leonardkraemer,是的,它有效。你救了我的一天!谢谢。我接受了答案:)日安!
0赞 nuhkoca 10/25/2018
嗨,@leonardkraemer,最后一个问题:)无论我有什么模式,它总是给我相同的输出。例如,我设置了一个模式,如“dd MM yyyy EEEE”,我预计输出 2018 年 10 月 20 日星期三,但它总是给出 2018-10-20